因此,我已经编写了一个程序,可以将网络摄像头中的图像捕获到称为pBuffer的 vector 中。
我可以很容易地访问每个像素的RGB像素信息
pBuffer[i]=R;pBuffer[i+1]=G;Buffer[i+2]=B.
没问题

现在,下一步是创建IplImage * img,并用pBuffer ...某种SetPixel的信息填充它。

网上有一个SetPixel函数,即:

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

其中的值是pBuffer信息,x和y是像素坐标。但是我根本无法解决这个问题。有任何想法吗??我正在使用C++。

最佳答案

您可以尝试执行以下操作(假设宽度和高度是图像尺寸):

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;

07-27 19:51