0

以下のような IPLIMAGE に割り当てている 0 から 255 までの値を持つ Mat と呼ばれる 2D ベクトルがあります。

 IplImage *A=cvCreateImage(cvSize(640,480), IPL_DEPTH_8U, 1)
 for (int i=0;i<640;i++)
{
 for (j...)
 {
    A->imageData[i*640+j]=Mat[i][j]
 }
}

しかし、3 つの 2D ベクトル Mat1、Mat2、Mat3 と、チャネル数が 3 に等しい IPLIMAGE があるとしたらどうでしょう。

IplImage *A=cvCreateImage(cvSize(640,480), IPL_DEPTH_8U, 3)

チャンネルごとに行って、最後にすべてをマージできると思っていましたが、それは最適なソリューションではないと本当に信じています。

その場合、3 チャンネルの imageData にアクセスする方法はありますか?

4

2 に答える 2

0

C++ API の OpenCV チュートリアルを見ると、Mat を操作する例があります。

http://docs.opencv.org/doc/tutorials/core/how_to_scan_images/how_to_scan_images.html#the-iterator-safe-method

3 チャンネルの画像にアクセスするには、3 つの方法があります。

于 2013-06-26T08:23:30.817 に答える
0

まず、 の構造体メンバーをMat直接割り当てることにより、 が整列されている場合、最初のコードの記述を回避できることに注意してください。画像のデータの割り当てを避けるために、代わりに使用する必要があります。構造体の詳細については、こちらを参照してください。imageDataIplImagecvCreateImageHeadercvCreateImage

第二に、あなたの質問に関して - 先ほど述べた手法で 3 つの画像を作成し、それを使用cvMergeして最終的な画像を作成することで、それを行うことができます。詳細はこちら

cv::Mat一般的には、古いインターフェースの代わりに使用する OpenCV の C++ インターフェースに移行することをお勧めしIplImageます。

于 2013-06-26T08:07:21.080 に答える