2013-08-27 15 views
9

Laut der Dokumentation sollte diese Funktion mit allen Elementen als Einsen zurückgeben.OpenCV Mat :: one-Funktion

Mat m = Mat::ones(2, 2, CV_8UC3); 

Ich erwarte eine 2x2-Matrix von [1,1,1] zu erhalten. Stattdessen habe ich folgendes:

[1, 0, 0] [1, 0, 0] 
[1, 0, 0] [1, 0, 0] 

Ist dies das erwartete Verhalten?

Antwort

10

Es sieht so aus, als ob Mat::ones() wie erwartet nur für einkanalige Arrays funktioniert. Bei Matrizen mit mehreren Kanälen setzt ones() nur den ersten Kanal auf Einsen, während die übrigen Kanäle auf Nullen gesetzt werden.

Verwenden Sie den folgenden Konstruktor statt:

Mat m = Mat(2, 2, CV_8UC3, Scalar(1,1,1)); 
std::cout << m; 

bearbeiten.

Mat m = Mat::ones(2, 2, CV_8UC3); 

Aufruf ist die gleiche wie

Mat m = Mat(2, 2, CV_8UC3, 1); // OpenCV replaces `1` with `Scalar(1,0,0)` 
+0

Aufruf Das ist großartig, danke. In meinem Fall musste ich stattdessen Scalar (255,255,255) machen (für Typ CV_8UC4) –