0

我一直在寻找有关此问题的几天,但没有找到任何已解决的线程。我需要通过一个简单的方法将相当大的图像(4 GB 及以上,.tiff / .png)加载到 openCV 代码中

src = imread(filepath, 1);

我正在使用 Visual Studio 2013,C++。

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

控制台正在通过以下消息,由“catch (...)”提取

OpenCV 错误:cv::setSize 文件 C:\builds\2_4_PackSlave-win32-vc12-shared\opencv\modules\ 中的参数值之一超出范围(总矩阵大小不适合“size_t”类型)核心\src\matrix.cpp,第 126 行

另一方面,VS2013 在运行时显示以下警告(完全没有编译问题):

poblacion.exe 中 0x76385608 处未处理的异常:Microsoft C++ 异常:内存位置 0x00C7EA70 处的 cv::Exception

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

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

有没有人可以帮助我们?我会传播任何令人满意的解决方案。

提前谢谢!

亚历克斯

4

1 回答 1

1

size_t尺寸因平台Win32x64异。错误告诉矩阵尺寸不适合size_t类型。

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

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

于 2017-08-04T19:25:35.660 回答