Создание нового изображения в цикле с использованием OpenCV - PullRequest
2 голосов
/ 07 января 2011

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

    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);
}

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

Заранее большое спасибо!

Ответы [ 3 ]

2 голосов
/ 07 января 2011

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

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

1 голос
/ 07 января 2011

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

0 голосов
/ 09 января 2011

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

...