DirectX и OpenCV - PullRequest
       23

DirectX и OpenCV

2 голосов
/ 15 апреля 2009

Итак, у меня уже есть программа, которая записывает изображение с веб-камеры в вектор с именем pBuffer. Я легко могу получить доступ к информации о пикселях 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 ++.

1 Ответ

1 голос
/ 16 апреля 2009

То, что вы пытаетесь сделать, вы можете сделать так (при условии, что ширина и высота являются размерами изображения):

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