OpenCV随机图像加载错误

Posted

技术标签:

【中文标题】OpenCV随机图像加载错误【英文标题】:OpenCV random image loading error 【发布时间】:2014-05-12 09:00:43 【问题描述】:

我正在使用 emgu opencv 2.4.2 版来处理从 720p 视频中提取的一系列 PNG 图像。我使用此代码读取图像:

image = new Image<Bgr, byte>(filename);

在我的 PNG 序列中的随机图像中,我得到:

Convertion from Image<Emgu.CV.Structure.Bgra, System.Byte> to
Image<Emgu.CV.Structure.Bgr, System.Byte> is not supported by OpenCV

表示输入图像有alpha通道,不能直接读取为24位图像结构。

但是,同一图像上永远不会发生异常。所以,下次我运行程序时,它可能会被很好地读取。异常通常发生在 PNG 序列中很远的地方,例如第 300 帧。其他时候它运行良好到后面的帧。但它通常会在 300-320 帧左右停止。

我在这里没有做任何可能导致看似随机问题的线程,它是一个非常基本的程序,读取一张图像,对其进行一些基本修改,然后将其保存到另一个文件。

我想一种解决方法是简单地捕获异常并重试,但这似乎很混乱。

这里有什么我遗漏的吗?

【问题讨论】:

根据to this comment这可能是某些DLL路径解析问题的副作用? 【参考方案1】:

原来问题是垃圾收集器不会自动清理 OpenCV Image 对象,您需要通过 image.Dispose() 手动完成。可能是因为它链接到一个 Bitmap 对象,由于它的原生实现,它不会被自动清理。

我得到的异常具有误导性,问题是由内存泄漏引起的,最终导致序列中的下一个图像无法成功加载。

【讨论】:

以上是关于OpenCV随机图像加载错误的主要内容,如果未能解决你的问题,请参考以下文章

如何调查随机Android原生函数调用错误?

图像处理 opencv 3.0 断言失败错误

在 OpenCV 中创建随机彩色图像

采用Visual Studio2012,用OpenCV做图像处理。编译通过,运行时出现如下错误,怎么解决?

在 OpenCv 3.0.0 中使用百分比随机读取一些图像 [关闭]

opencv学习笔记opencv加载图像修改图像显示图像保存图像以及代码举例