Не удалось выделить огромные изображения в OpenCV - PullRequest
2 голосов
/ 17 сентября 2011

Я работаю с годами над обработкой изображений с OpenCV 2.2.0.

Я получаю ошибку выделения памяти ТОЛЬКО при попытке выделить IplImage> 2 ГБ, учитывая, что такое же распределение с CvMat работает.Я могу выделить все, что захочу, используя CvMat, я попробовал также> 10 ГБ.

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);
}

Сообщение об ошибке «Недостаточно памяти: в неизвестной функции ... это может быть ошибка?

1 Ответ

2 голосов
/ 17 сентября 2011
Структура

IplImage не поддерживает изображения размером более 2 ГБ, поскольку в поле типа int хранится общий размер изображения.Даже если вы выделите IplImage больше, чем 2Gb с каким-то хаком, другие методы не смогут правильно его обработать.OpenCV унаследовал структуру IplImage от библиотеки обработки изображений Intel, поэтому нет никаких шансов, что формат будет изменен.

Вам следует использовать новые структуры (CvMat в интерфейсе C или cv::Mat в интерфейсе C ++)работать с огромными изображениями.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...