Image 无法在OpenCV中分配大型图像

Image 无法在OpenCV中分配大型图像,image,memory-management,opencv,Image,Memory Management,Opencv,我从一年前开始使用OpenCV 2.2.0进行图像处理 只有当我尝试分配一个大于2GB的IplImage时,才会出现内存分配错误,因为CvMat的分配是相同的。我可以使用CvMat分配我想要的任何内容,我也尝试了>10GB OpenCV是64位编译的,也是这个简单的应用程序。此外,我确信应用程序在64位模式下运行,正如我从任务管理器中看到的那样。操作系统(Windows7)也是64位的 int main(int argc, char* argv[]) { printf("trying t

我从一年前开始使用OpenCV 2.2.0进行图像处理

只有当我尝试分配一个大于2GB的IplImage时,才会出现内存分配错误,因为CvMat的分配是相同的。我可以使用CvMat分配我想要的任何内容,我也尝试了>10GB

OpenCV是64位编译的,也是这个简单的应用程序。此外,我确信应用程序在64位模式下运行,正如我从任务管理器中看到的那样。操作系统(Windows7)也是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);
}

错误消息是“内存不足:功能未知。。。这可能是一个bug吗?

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

< >在C接口中使用新的结构(<代码> CVMAT < /代码>:<代码> CV::C++接口中的MAT)以巨大的图像操作。< /P>