获取OpenCV错误:运行OpenCV示例程序时内存不足示例程序:“stitching_detailed.cpp”

问题描述:

我最近开始与OpenCV一起工作,目的是拼接大量图像以创建大量全景图。为了开始我的实验,我查看了OpenCV文件附带的示例程序,以了解如何实现OpenCV库。由于我对图像拼接感兴趣,我直接去了“stitching_detailed.cpp”。该代码可以在这里找到:获取OpenCV错误:运行OpenCV示例程序时内存不足示例程序:“stitching_detailed.cpp”

https://code.ros.org/trac/opencv/browser/trunk/opencv/samples/cpp/stitching_detailed.cpp?rev=6856

现在,这个程序做了大部分的什么,我需要它做的事,但我遇到了一些有趣的事情。我发现了9个的可选投影整经机的15日,我收到以下错误,当我尝试运行程序:

Insufficient memory (Failed to allocate XXXXXXXXXX bytes) in unknown function, 
    file C:\slave\winInstallerMegaPack\src\opencv\modules\core\src\alloc.cpp, 
    line 52 

其中“X的”整数关口,不同类型的投影之间的变化(好像不同的方法需要不同数量的空间)。对于“alloc.cpp”完整的源代码可在以下网站上找到:

https://code.ros.org/trac/opencv/browser/trunk/opencv/modules/core/src/alloc.cpp?rev=3060

然而,代码在alloc.cpp发出此错误的行是:

static void* OutOfMemoryError(size_t size) 
    { 
    --HERE--> CV_Error_(CV_StsNoMem, ("Failed to allocate %lu bytes", (unsigned long)size)); 
     return 0; 
    } 

所以,我错过了这个错误可能发生的可能原因。我意识到如果系统内存不足,通常会​​发生此错误,但根据我的任务管理器,当使用测试映像运行此程序时,我从不使用更多〜3.5GB的RAM。

此外,由于该程序是作为OpenCV开发人员的OpenCV拼接功能的样本编写的,我发现很难相信源代码中存在严重的内存错误。

最后,如果我使用了一些扭曲方法程序正常工作:

- spherical 
- fisheye 
- transverseMercator 
- compressedPlanePortraitA2B1 
- paniniPortraitA2B1 
- paniniPortraitA1.5B1) 

但让程序使用任何其他的(通过命令行标签
--warp [PROJECTION_NAME ]):

- plane 
- cylindrical 
- stereographic 
- compressedPlaneA2B1 
- mercator 
- compressedPlaneA1.5B1 
- compressedPlanePortraitA1.5B1 
- paniniA2B1 
- paniniA1.5B1 

我收到上面提到的错误。我从横向墨卡托投影仪得到了相当不错的结果,但我想特别测试立体效果。任何人都可以帮我解决这个问题吗?

,我试图处理这些照片是1360×1024的分辨率和我的电脑有如下统计:

Model: HP Z800 Workstation 
Operating System: Windows 7 enterprise 64-bit OPS 
Processor: Intel Xeon 2.40GHz (12 cores) 
Memory: 14GB RAM 
Hard Drive: 1TB Hitachi 
Video Card: ATI FirePro V4800 

任何帮助将不胜感激,谢谢!

当我运行的OpenCV的APP traincascade,我得到的只是相同的错误你:

Insufficient memory (Failed to allocate XXXXXXXXXX bytes) in unknown function, 
    file C:\slave\winInstallerMegaPack\src\opencv\modules\core\src\alloc.cpp, 
    line 52 

的时候,只有70%左右我的RAM(6G)的pecent被占领。当runnig逐步训练时,我发现错误会被抛出。当它使用大于1.5G的RAM空间时。 然后,我发现有两个参数可以控制多少内存应使用:

-precalcValBufSize -precalcIdxBufSize so i tried to set these two to 128, it run. I hope my experience can help you.

我想这个问题是一无所知内存泄漏,它只是涉及到操作系统多少内存限制了应用程序占用。我希望有人可以检查我的猜测。

这可能与拼接的顺序有关,我将大图分割成3 * 3,首先我将它们逐行拼接,没有问题,当我将它们逐列拼接时,问题和你一样。

+0

这应该可能是一条评论。 – Robert 2014-08-05 09:45:05