Ich habe eine Farbe, die ich in einen anderen Farbraum konvertieren möchte. Ist es möglich, cvtColor
auf einem cv::Vec3f
direkt zu verwenden, ohne ein 1x1 cv::Mat
zu erstellen und es mit diesem Pixel zu bevölkern, indem man cvtColor
auf dem cv::Mat
verwendet und dann das einzige Pixel aus der Ausgabe holt? Ich habe das folgende versucht, aber es scheint nicht zu mögen, einen Vektor zu erhalten.Konvertiere eine einzelne Farbe mit cvtColor
Irgendwelche Vorschläge?
#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;
}
Ich habe auch versuchte das, aber eine andere Fehlermeldung erhalten:
#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 Nein, ich sehe nicht, wie das hier die tatsächliche Umwandlung tun würde? Können Sie Code zur Verwendung einer Farbraumkonvertierung posten? –
Warum 'cvtColor'? Wenn Sie nur einen Vektor konvertieren möchten, wäre es einfacher, eine Konvertierungsfunktion zu schreiben. –
@QuangHoang Da OpenCV bereits Tonnen von Conversions geschrieben hat. Es ist normalerweise ziemlich schwierig, eine Farbkonvertierung zu implementieren, da alle Umhüllungs-/Kantenfälle usw. enthalten sind. –