Mam kolor, który chcę przekonwertować na inną przestrzeń kolorów. Czy można użyć cvtColor
bezpośrednio na cv::Vec3f
bez tworzenia 1x1 cv::Mat
i zapełniania go tym pikselem, używając cvtColor
na cv::Mat
, a następnie uzyskać jedyny piksel z wyjścia? Próbowałem następujące, ale nie wydaje się, że lubię przekazywanie wektora.Konwersja jednego koloru z cvtColor
Wszelkie sugestie?
#include <iostream>
#include <opencv2/opencv.hpp>
int main(int, char*[])
{
cv::Vec3f hsv;
hsv[0] = .9;
hsv[1] = .8;
hsv[2] = .7;
std::cout << "HSV: " << hsv << std::endl;
cv::Vec3b bgr;
cvtColor(hsv, bgr, CV_HSV2BGR); // OpenCV Error: Assertion failed (scn == 3 && (dcn == 3 || dcn == 4) && (depth == CV_8U || depth == CV_32F)) in cvtColor
std::cout << "BGR: " << bgr << std::endl;
return EXIT_SUCCESS;
}
Próbowałem też to, ale dostać inny błąd:
#include <iostream>
#include <opencv2/opencv.hpp>
int main(int, char*[])
{
cv::Mat_<cv::Vec3f> hsv(cv::Vec3f(0.7, 0.7, 0.8));
std::cout << "HSV: " << hsv << std::endl;
cv::Mat_<cv::Vec3b> bgr;
cvtColor(hsv, bgr, CV_HSV2BGR); // OpenCV Error: Assertion failed (!fixedType() || ((Mat*)obj)->type() == mtype) in create
std::cout << "BGR: " << bgr << std::endl;
return EXIT_SUCCESS;
}
@Nacho Nie, nie rozumiem, jak to by się tutaj dokonało? Czy mógłbyś opublikować kod pokazujący, jak go używać do konwersji przestrzeni kolorów? –
Dlaczego 'cvtColor'? Jeśli chcesz przekonwertować tylko jeden wektor, to łatwiej będzie napisać funkcję konwersji. –
@QuangHoang Ponieważ OpenCV ma już napisane mnóstwo konwersji. Zwykle dość trudne jest zaimplementowanie konwersji kolorów ze względu na wszystkie przypadki zawijania/krawędzi itd. –