現在、いくつかの値を8ビットの符号なし整数値の3チャネル、480行×640列の行列に読み込みたいとします。私は次のメソッドを使用して/グラブ値を割り当てることができません全体の行列を反復処理しようとするとOpenCV Matクラス:マルチチャネルマトリックスの要素へのアクセス
rgbMatrix = Mat::zeros(480,640,CV_8UC3);
:
宣言:私はこのような行列を初期化しています。値は、単に0私のコードは次のようになり滞在:私は(8ビット符号なし整数値の640列でも480行)3つの別々の1チャネル行列を宣言するとき、しかし
for (int i = 0; i < rgbMatrix.rows; i++)
{
for (int j = 0; j < rgbMatrix.cols; j++)
{
(rgbMatrix.data + rgbMatrix.step * i)[j * rgbMatrix.channels() + 0] = *value0*;
(rgbMatrix.data + rgbMatrix.step * i)[j * rgbMatrix.channels() + 1] = *value1*;
(rgbMatrix.data + rgbMatrix.step * i)[j * rgbMatrix.channels() + 2] = *value2*;
}
}
の要素にアクセスしようとしますこれらの行列次のコードは動作します:
宣言:
rgbMatrix0 = Mat::zeros(480,640,CV_8UC1);
rgbMatrix1 = Mat::zeros(480,640,CV_8UC1);
rgbMatrix2 = Mat::zeros(480,640,CV_8UC1);
for (int i = 0; i < rgbMatrix0.rows; i++)
{
for (int j = 0; j < rgbMatrix0.cols; j++)
{
(rgbMatrix0.data + rgbMatrix0.step * i)[j] = *value0*;
(rgbMatrix1.data + rgbMatrix1.step * i)[j] = *value1*;
(rgbMatrix2.data + rgbMatrix2.step * i)[j] = *value2*;
}
}
は今、私はしばらく退屈でしょう3つの別々の変数を追跡するためのものとして、これらの操作のためのちょうど1のマトリックスを使用したいです。私は、3チャンネルマトリックスのためにメモリ上の正しい点にアクセスしていないと感じています。誰かが、私がコードの2番目の部分で行ったことをどのように達成できるのか分かっていますが、3つの別々の1チャネル行列の代わりに1つの3チャネル行列を使用していますか?
ありがとうございました。