2

だから私は、WebカメラからpBufferと呼ばれるベクトルに画像をキャプチャするプログラムをすでに書いています。単純に、各ピクセルの RGB ピクセル情報に簡単にアクセスできます。

pBuffer[i]=R;pBuffer[i+1]=G;Buffer[i+2]=B.

ここでは問題ありません。

次のステップは、IplImage* img を作成し、それに pBuffer の情報を入力することです。ある種の SetPixel です。

Web には SetPixel Function があります。つまり、次のとおりです。

(((uchar*)(image­>imageData + image­>widthStep*(y))))[x * image­>nChannels + channel] = (uchar)value;

ここで、値は pBuffer 情報、x と y はピクセル座標です。ただし、これを機能させることはできません。何か案は??私はC++で作業しています。

4

1 に答える 1

1

あなたがやろうとしていることは、次のようにすることができます(幅と高さが画像の寸法であると仮定します):

CvSize size;
size.height = height;
size.width = width;
IplImage* ipl_image_p = cvCreateImage(size, IPL_DEPTH_8U, 3);

for (int y = 0; y < height; ++y)
    for (int x = 0; x < width; ++x)
        for (int channel = 0; channel < 3; ++channel)
            *(ipl_image_p->imageData + ipl_image_p->widthStep * y + x * ipl_image_p->nChannels + channel) = pBuffer[x*y*3+channel];

ただし、データをコピーする必要はありません。IplImage で画像データを使用することもできます (pBuffer が char* 型であると仮定します。それ以外の場合は、おそらくキャストする必要があります)。

CvSize size;
size.height = height ;
size.width = width;
IplImage* ipl_image_p = cvCreateImageHeader(size, IPL_DEPTH_8U, 3);
ipl_image_p->imageData = pBuffer;
ipl_image_p->imageDataOrigin = ipl_image_p->imageData;
于 2009-04-16T04:47:22.747 に答える