2011-09-17 39 views
2

我在OpenCV 2.2.0的圖像處理方面工作一年。未能在OpenCV中分配巨大的圖像

我得到一個內存分配錯誤只有當我嘗試分配一個> 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); 
} 

該錯誤消息「內存不足:在未知功能...它可以是一個錯誤

回答

2

IplImage結構不支持圖像更大然後2Gb的,因爲它在該領域總存儲圖像尺寸? int類型。即使你分配IplImage更大然後2Gb的一些黑客則其他方法將不能正確地處理它。OpenCV的繼承IplImage結構從英特爾圖像處理庫,所以沒有機會格式將被改變。

您應該使用更新的結構(C接口中的CvMat或C++接口中的cv::Mat)以處理巨大的圖像。