Ho un colore che voglio convertire in uno spazio colore diverso. È possibile utilizzare cvtColor
su un cv::Vec3f
direttamente senza creare un 1x1 cv::Mat
e popolarlo con quel pixel, utilizzando cvtColor
su cv::Mat
, quindi prelevando l'unico pixel dall'output? Ho provato quanto segue, ma non sembra che mi piaccia passare un vettore.Convertire un singolo colore con cvtColor
Qualche suggerimento?
#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;
}
ho anche provato, ma ottenere un errore diverso:
#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 No, non vedo come sarebbe la conversione attuale qui? Potresti pubblicare un codice che mostra come usarlo per fare una conversione dello spazio colore? –
Perché 'cvtColor'? Se vuoi solo convertire un solo vettore, immagino che sarebbe più facile scrivere una funzione di conversione. –
@QuangHoang Perché OpenCV ha già un sacco di conversioni scritte. Di solito è abbastanza complicato implementare una conversione del colore a causa di tutti i casi di wrapping/edge, ecc. –