2011-09-17 3 views
2

OpenCV 2.2.0을 사용한 이미지 처리에 일 년이 넘었습니다.OpenCV에서 거대한 이미지를 할당하지 못했습니다.

CvMat과 동일한 할당이 작동하는 경우> 2GB IplImage를 할당하려고하면 메모리 할당 오류가 발생합니다. CvMat을 사용하여 원하는대로 할당 할 수 있으며, 10GB 이상을 시도했습니다.

OpenCV는 64 비트 컴파일이며이 간단한 응용 프로그램입니다. 또한 작업 관리자에서 볼 수 있듯이 응용 프로그램이 64 비트 모드로 실행됩니다. 미국. (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 구조는 2 기가 바이트 다음 이미지가 더 큰 지원하지 않습니다? int 유형입니다. 당신은 몇 가지 해킹과 2 기가 바이트 다음 IplImage 더 큰를 할당하더라도 다음 다른 방법을 제대로 처리 할 수 ​​없습니다. OpenCV의 인텔 이미지 처리 라이브러리에서 IplImage 구조를 상속 형식이 변경됩니다 기회가없는 있도록.

거대한 이미지와 함께 작동하려면 더 새로운 구조 (C 인터페이스에서는 CvMat, C++ 인터페이스에서는 cv::Mat)를 사용해야합니다.

관련 문제