OpenCV cv :: Mat 'Einsen' für Mehrkanalmatrix?

Bei der Arbeit mit 1-Kanal (z.CV_8UC1) Mat Objekte in OpenCV, dies erzeugt eine Mat von allen:cv::Mat img = cv::Mat::ones(x,y,CV_8UC1).

Wenn ich jedoch 3-Kanal-Bilder verwende (z.CV_8UC3) wird es etwas komplizierter. Tuncv::Mat img = cv::Mat::ones(x,y,CV_8UC3) setztEinsen in Kanal 0, aber die Kanäle 1 und 2 enthaltenNullen. Also, wie verwende ichcv::Mat::ones() für mehrkanalbilder?

Hier ist ein Code, der Ihnen helfen könnte, zu verstehen, 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
}

Ich hätte also diesen Ausdruck erwartet:px of 3-channel img: 1 1 1, aber stattdessen sehe ich Folgendes:px of 3-channel img: 1 0 0.

P.S. Ich habe viel gesucht, bevor ich das gepostet habe. Ich konnte dieses Problem nicht lösen, indem ich SO nach "[opencv] Mat :: ones" oder "[opencv] + mat + ones" suchte.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage