OpenCV cv::Mat 'lieben' für die multi-channel-matrix?

Beim arbeiten mit 1-Kanal (z.B. CV_8UC1) Mat Objekte in OpenCV schafft eine Matte für alle diejenigen: cv::Mat img = cv::Mat::ones(x,y,CV_8UC1).

Jedoch, wenn ich 3-Kanal-Bilder (z.B. CV_8UC3), werden die Dinge ein wenig komplizierter. Dabei cv::Mat img = cv::Mat::ones(x,y,CV_8UC3) stellt diejenigen, die in Kanal 0, aber die Kanäle 1 und 2 enthalten Nullen. So, wie benutze ich cv::Mat::ones() für multi-Kanal-Bilder verwendet werden?

Hier ist etwas code, der helfen könnte, Sie zu sehen, was ich meine:

void testOnes() {
 int x=2; int y=2; //arbitrary

 //1 channel
 cv::Mat img_C1 = cv::Mat::ones(x,y,CV_8UC1);
 uchar px1 = img_C1.at<uchar>(0,0); //not sure of correct data type for px in 1-channel img
 printf("px of 1-channel img: %d \n", (int)px1); //prints 1

 //3 channels
 cv::Mat img_C3 = cv::Mat::ones(x,y,CV_8UC3); //note 8UC3 instead of 8UC1
 cv::Vec3b px3 = img_C3.at<cv::Vec3b>(0,0);
 printf("px of 3-channel img: %d %d %d \n", (int)px3[0], (int)px3[1], (int)px3[2]); //prints 1 0 0
}

So, ich hätte erwartet, um zu sehen, dieser Ausdruck: px of 3-channel img: 1 1 1, aber stattdessen sehe ich dieses: px of 3-channel img: 1 0 0.

P. S. ich habe eine Menge suchen, bevor dieses posting. Ich war nicht in der Lage, diese zu lösen, indem die Suche SO für "[opencv] Mat::ones" oder "[opencv] +mat +ones".

  • Sidenote: ich bin nicht sicher, ob ich verwenden soll uchar im Ort cv::Vec3b für einen 1-Kanal-Bild pixel. OpenCV bietet eine Vielzahl von 2-, 3-, und 4-Element-Vektor-Klassen, aber keine Analogie für ein singleton. (Suche nach Vec3b auf diese Seite: opencv.willowgarage.com/documentation/cpp/...)
Schreibe einen Kommentar