使用OpenCV在循环中创建新图像

时间:2011-01-07 10:54:08

标签: image-processing opencv for-loop

我正在使用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 个答案:

答案 0 :(得分:2)

images只是一个IplImage指针数组,因此以下内容应该有效:

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

答案 1 :(得分:1)

或更好的矢量图像...... 然后在每个循环上的images.pushback(newImage)

答案 2 :(得分:0)

使用std::vector<IplImage*> images(maxImNumber) 迭代一次以使用例如分配所有图像。 cvCreateImage()cvCloneimage() 当你完成它后再次迭代它并cvReleaseImage()所有图像。