2011-01-07 33 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

开始使用OpenCV的C++ API! – ypnos 2011-01-07 15:52:15

回答

2

images只是一个的IplImage指针数组所以下面应该工作:在每次循环

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

1

或更好的矢量图像... 然后images.pushback(newImage)

0

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