2011-01-07 2 views
2

Я программирую код преобразования изображения с OpenCV, и я не знаю, как создать буфер памяти изображений для загрузки изображения на каждой итерации. У меня есть число итераций (maxImNumber), и у меня есть входное изображение. В каждом цикле программа должна создавать изображение, которое изменяет размер и изменяет входное изображение. Вот базовый код (концепция).Создание нового изображения в цикле с использованием OpenCV

for (int imageIndex = 0; imageIndex < maxImNumber; imageIndex++){ 
    cvCopy(inputImage, images[imageIndex], 0); 
    cvReleaseImage(&inputImage); 

    images[imageIndex+1] = cvCreateImage(cvSize((image[imageIndex]->width)/2, image[imageIndex]->height), IPL_DEPTH_8U, 1); 

    for (i=1; i < image[imageIndex]->height; i++) { 
     index = 0;  // 
     for(j=0; j < image[imageIndex]->width ; j=j+2){ 
      // doing some basic matematical operation on image content and store it to new image 
      images[imageIndex+1][i][index] = (image[imageIndex][i][j] + image[imageIndex][i][j+2])/2; 
      index++ 
     } 
    } 

    inputImage = cvCreateImage(cvSize((image[imageIndex+1]->width), image[imageIndex]->height), IPL_DEPTH_8U, 1); 
    cvCopy(images[imageIndex+1], inputImage, 0); 
} 

Может кто-нибудь, пожалуйста, объясните, как я могу создать этот буфер изображения (изображения []) и выделять для него память. Также как я могу получить доступ к любому изображению в этом буфере?

спасибо, что заблаговременно!

+2

Начать использование C++ API OpenCV! – ypnos

ответ

2

images просто массив указателей IplImage так должно работать:

IplImage** images = (IplImage**) malloc(sizeof(IplImage*)*maxImNumber)

1

или еще лучше векторные изображения ... , а затем images.pushback (newImage) на каждой петле

0

Используйте std::vector<IplImage*> images(maxImNumber).
Итерации по нему один раз, чтобы выделить все изображения, используя, например, cvCreateImage() или cvCloneimage().
Когда вы закончите с этим итератором над ним снова и cvReleaseImage() все изображения.

Смежные вопросы