2013-08-27 26 views
9

ドキュメントによれば、この関数はすべての要素を1として、Matを返さなければなりません。OpenCV Mat :: ones関数

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

私はの2x2行列を得ることを期待していました。代わりに、私はこれを持っています:

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

これは期待された動作ですか?

答えて

10

Mat::ones()のように見えるのは、シングルチャンネルアレイの場合だけです。複数チャネルの行列の場合ones()は、最初のチャネルのみを1に設定し、残りのチャネルは0に設定します。

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

編集

ではなく、次のコンストラクタを使用してください。

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

を呼び出すと、素晴らしいことだ

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

、感謝を呼び出すのと同じです。私の場合は、代わりにScalar(255,255,255)を実行する必要がありました(CV_8UC4タイプの場合) –

関連する問題