首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获取OpenCV错误:运行OpenCV示例程序"stitching_detailed.cpp“时内存不足

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

Stack Overflow用户
提问于 2012-07-17 02:44:10
回答 3查看 3.3K关注 0票数 5

我最近开始使用OpenCV,目的是将大量图像拼接在一起,创建巨大的全景图。在开始我的实验之前,我查看了OpenCV文件附带的示例程序,以了解如何实现OpenCV库。因为我对图像拼接感兴趣,所以我直接选择了“stitching_detailed.cpp”。代码可以在以下位置找到:

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

现在,这个程序完成了我需要它做的大部分事情,但我遇到了一些有趣的事情。我发现当我尝试运行程序时,15个可选投影翘曲中的9个会收到以下错误:

代码语言:javascript
复制
    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中发出此错误的代码行为:

代码语言:javascript
复制
    static void* OutOfMemoryError(size_t size)
    {
    --HERE--> CV_Error_(CV_StsNoMem, ("Failed to allocate %lu bytes", (unsigned long)size));
        return 0;
    }

所以,我只是对这个错误可能发生的原因感到迷惑。我意识到如果系统内存不足,通常会发生这个错误,但根据我的任务管理器,当我使用我的测试图像运行这个程序时,我从未使用超过3.5 to的RAM。

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

最后,如果我使用一些扭曲方法,程序运行得很好:

代码语言:javascript
复制
- spherical
- fisheye
- transverseMercator
- compressedPlanePortraitA2B1
- paniniPortraitA2B1 
- paniniPortraitA1.5B1)

但要求程序使用其他任何参数(通过命令行标记

--warp PROJECTION_NAME):

代码语言:javascript
复制
- plane
- cylindrical
- stereographic
- compressedPlaneA2B1
- mercator
- compressedPlaneA1.5B1
- compressedPlanePortraitA1.5B1
- paniniA2B1
- paniniA1.5B1

我得到了上面提到的错误。我从transverseMercator项目warper中得到了相当好的结果,但我想特别测试一下立体图像。有人能帮我解决这个问题吗?

我尝试处理的图片的分辨率是1360 x 1024,我的计算机有以下统计数据:

代码语言:javascript
复制
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

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

EN

回答 3

Stack Overflow用户

发布于 2013-04-22 14:44:35

当我运行OpenCV的应用程序traincascade时,我得到了和你一样的错误:

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

当时,只有大约70%的内存(6G)被占用。当我一步一步运行trainscascade时,我发现错误可能是thrown.when,因为它使用了超过1.5G的内存空间。然后,我发现有两个参数可以控制应该使用多少内存:

,-precalcValBufSize,-precalcIdxBufSize,所以我试着把这两个设置为128,它运行。我希望我的经验能帮助你。

我认为这个问题与内存泄漏无关,它只是与操作系统限制应用程序占用多少内存有关。我希望有人能查证我的猜测。

票数 2
EN

Stack Overflow用户

发布于 2014-08-05 17:27:26

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

票数 0
EN

Stack Overflow用户

发布于 2018-05-23 22:37:00

我最近遇到了一个与OpenCV图像拼接类似的问题。我已经使用create方法创建了stitcher实例,并提供了5张垂直顺序的图像来缝合方法,但我收到了内存不足的错误。

设置后成功创建全景图:

setWaveCorrection(false)

如果您需要波校正,则此解决方案将不适用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11510545

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档