2013-08-27 16 views
9

Zgodnie z dokumentami ta funkcja powinna zwrócić wartość Mat ze wszystkimi elementami jako tymi.OpenCV Mat :: one function

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

Spodziewałem się dostać macierz 2x2 [1,1,1]. Zamiast tego mam to:

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

Czy to oczekiwane zachowanie?

Odpowiedz

10

Wygląda na to, że Mat::ones() działa zgodnie z oczekiwaniami tylko w przypadku macierzy jednokanałowych. W przypadku macierzy z wieloma kanałami ones() ustawia tylko pierwszy kanał na pierwszy, podczas gdy pozostałe kanały są ustawione na zera.

Poniższa konstruktora Zamiast:

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

Edycja. Wywołanie

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

jest taka sama jak wywołanie

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

To świetnie, dzięki. W moim przypadku musiałem zrobić Scalar (255,255,255) zamiast (dla typu CV_8UC4) –