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随机图像加载错误的主要内容,如果未能解决你的问题,请参考以下文章
采用Visual Studio2012,用OpenCV做图像处理。编译通过,运行时出现如下错误,怎么解决?