2009-04-15 16 views
2

私はすでにWebカメラからのイメージをpBufferというベクトルにキャプチャするプログラムを作成しています。 Iが容易単にDirectXとOpenCV

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

ここで問題なしにより、各画素のRGB画素情報をアセスすることができます。

次のステップでは、IplImage * imgを作成し、pBuffer ...の情報を入力します。SetPixelのようなものです。

ウェブ上とsetPixel機能があり、それは次のとおりです。

値がpBuffer情報、xとyの私は単に仕事にこれを置くことができないcoordinates.Howeverピクセルです
(((uchar*)(image­>imageData + image­>widthStep*(y))))[x * image­>nChannels + channel] = (uchar)value; 

。何か案は??私はC++で作業しています。あなたは、この(幅と高さは、画像の大きさと仮定)のように行うことができますしようとしている何

答えて

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]; 

ただし、データをコピーする必要はありません。あなたはまた、(そうでない場合は、あなたがそれをキャストする可能性が必要、pBufferはchar *型であると仮定)IplImageへして画像データを使用することができます。

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; 
+0

int型 –

+0

BYTEがあるとして、私はそれにアクセスすることができますがpBufferのデータはBYTEですunsigned charのtypedefなので、安全にcharにキャストすることができます。そのコードは次のようになります。ipl_image_p-> imageData =(char *)pBuffer; –

+0

これはうまくいきました...しかし、IplImageで作成された画像は逆さまです...何故でしょうか? –