15 Stimmen

Einkanalbild in 3-Kanalbild umwandeln C++ / OpenCV

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?

17voto

Vadim Shender Punkte 6614

Sie sollten Folgendes verwenden CV_GRAY2BGR anstelle von CV_BGR2GRAY .

7voto

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.

7voto

thundertrick Punkte 1464

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 :)

3voto

Utkarsh Sinha Punkte 3275

Versuchen Sie, grau,grau,grau zu einer BGR zusammenzuführen.

1voto

Allan Navarro Punkte 11

Sie können einen Vektor desselben Kanals erstellen und ihn dann wie folgt zusammenführen:

std::vector<cv::Mat> copies{mat,mat,mat};  
cv::merge(copies,mat);

CodeJaeger.com

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.

Powered by:

X