Ich verwende openCV C++
Ich muss ein einkanaliges Bild in ein 3-Kanal-Bild umwandeln. So kann ich dies verwenden: cvCvtColor(result,gray,CV_BGR2GRAY);
Das geht nicht, weil das Ergebnisbild ein Einkanalbild ist. Irgendwelche Ideen?
Ich verwende openCV C++
Ich muss ein einkanaliges Bild in ein 3-Kanal-Bild umwandeln. So kann ich dies verwenden: cvCvtColor(result,gray,CV_BGR2GRAY);
Das geht nicht, weil das Ergebnisbild ein Einkanalbild ist. Irgendwelche Ideen?
Versuchen Sie dies:
CvSize dim = cvSize(int width, int height);
IplImage* dst = cvCreateImage( dim, 8, 3 );
IplImage* gray = cvCreateImage(dim, 8, 1);
// Load the gray scale image
cvMerge(gray , NULL, NULL, NULL, dst);
cvShowImage("gray",gray);
cvShowImage("dst",dst);
cvWaitKey(0);
Sowohl dst als auch gray müssen den gleichen Datentyp haben. Sie können nicht einfach einen Float in eine uint-Matrix einfügen. Dafür müssen Sie cvScale verwenden.
Ich überprüfte cvtColor im OpenCV-Referenzbuch, und fand dies:
C++:void cvtColor (InputArray src , OutputArray dst , int code , int dstCn \=0 )
dstCn - Anzahl der Kanäle im Zielbild. Wenn der Parameter 0 ist, wird die Anzahl der Kanäle automatisch aus src und code abgeleitet.
Ich habe verwendet
cvtColor(src,gray,CV_BGR2GRAY,1);
um eine 3-Kanal-Matte in eine 1-Kanal-Matte umzuwandeln, und es hat funktioniert. Also ändern dstCn bis 3 könnte für Sie funktionieren :)
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.