OpenCV cv :: Mat 'ones' para matrices multicanal?

Cuando se trabaja con 1 canal (por ejemplo,CV_8UC1) Objetos Mat en OpenCV, esto crea un Mat de todos:cv::Mat img = cv::Mat::ones(x,y,CV_8UC1).

Sin embargo, cuando uso imágenes de 3 canales (por ejemplo,CV_8UC3), las cosas se ponen un poco más complicadas. Obracv::Mat img = cv::Mat::ones(x,y,CV_8UC3) poneunos en el canal 0, pero los canales 1 y 2 contienenceros. Entonces, ¿cómo usocv::Mat::ones() para imágenes multicanal?

Aquí hay un código que podría ayudarte a ver lo que quiero decir:

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
}

Por lo tanto, habría esperado ver esta impresión:px of 3-channel img: 1 1 1, pero en cambio veo esto:px of 3-channel img: 1 0 0.

PD Hice mucha búsqueda antes de publicar esto. No pude resolver esto buscando SO para "[opencv] Mat :: ones" o "[opencv] + mat + ones".

Respuestas a la pregunta(2)

Su respuesta a la pregunta