2017-08-04 348 views
0

我一直在寻找关于这个问题的日子,并没有找到任何解决的线程。 我需要的简单openCV对大图像或巨大图像的imread限制Mat bug#3258

src = imread(filepath, 1); 

手段我使用Visual Studio 2013,C++装载相当大的图像(4 GB及以后,无论是.TIFF/.PNG)转换成OpenCV的代码。

尽管我使用的是96Gb-RAM机器,但在通过OpenCV的“imread”函数加载这些大图像时,运行时警报即将出现。一直尝试使用越来越小的图像/文件,直到它们确实被读取/加载,所以我们知道这是一个内存/分配的问题,因为较小的图像被正确加载和处理。

控制台throughing以下信息,通过提取“捉(...)”

OpenCV Error: One of arguments' values is out of range (The total matrix size does not fit to "size_t" type) in cv::setSize, file C:\builds\2_4_PackSlave-win32- vc12-shared\opencv\modules\core\src\matrix.cpp, line 126

在另一方面,VS2013显示以下警报,同时运行(无任何编译问题):

Unhandled exception at 0x76385608 in poblacion.exe: Microsoft C++ exception: cv::Exception at memory location 0x00C7EA70

也争论“没有符号加载”。我们在Win32,Debug模式下编译。

这个问题是错误#3258,但没有找到解决的线程,只是讨论regarging的size_t类型导致没有明确的解决方案...应该有一种阅读大图像的方式,而无需通过openCV库...

难道这发生在那里谁能帮助我们?我会传播任何令人满意的解决方案。

THANX提前!

亚历

回答

1

size_t尺寸不同平台Win32x64之间。错误告诉矩阵尺寸不适合size_t类型。

考虑切换到x64配置,您的问题应该消失。

除此之外,Win32配置不适用于预计每个进程使用> 4GB RAM的应用程序。 这意味着您将无法使用运行Win32应用程序的96GB RAM的机器的全部功能。