无法在OpenCV中分配大图像

时间:2011-09-17 13:17:34

标签: image memory-management opencv

我在OpenCV 2.2.0的图像处理方面工作了一年。

如果我尝试分配> 2GB IplImage,我会得到一个内存分配错误,因为CvMat的相同分配是有效的。我可以使用CvMat分配任何我想要的东西,我也试过了> 10 GB。

OpenCV是64位编译的,也是这个简单的应用程序。此外,我确信应用程序以64位模式运行,我可以从任务管理器中看到。 O.S. (Windows 7)也是64位。

int main(int argc, char* argv[])
{
    printf("trying to allocate >2GB matrix...\n");
    CvMat *huge_matrix = cvCreateMat(40000,30000,CV_16UC1);
    cvSet(huge_matrix,cvScalar(5));
    printf("...done!\n\n");
    system("PAUSE");

    printf("trying to allocate >2GB image...\n");
    IplImage *huge_img = cvCreateImage(cvSize(40000,30000),IPL_DEPTH_16U, 1);
    cvSet(huge_img,cvScalar(5));
    printf("...done!\n\n");
    system("PAUSE");

    cvReleaseMat(&huge_matrix);
    cvReleaseImage(&huge_img);
}

错误信息是“内存不足:在未知功能中......这可能是个错误吗?”

1 个答案:

答案 0 :(得分:2)

IplImage结构不支持大于2Gb的图像,因为它将总图像大小存储在int类型的字段中。即使你用一些黑客分配IplImage大于2Gb,那么其他方法也无法正确处理它。 OpenCV继承了英特尔图像处理库中的IplImage结构,因此不会更改格式。

您应该使用较新的结构(C接口中的CvMat或C ++接口中的cv::Mat)来处理大图像。