我使用emgu opencv version 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帧左右停止。
我在这里没有做任何可能导致看似随机问题的线程,这是一个非常基本的程序,读取一个图像,对其进行一些基本修改,然后将其保存到另一个文件。
我想一个解决方法是简单地捕获异常并再次尝试,但这似乎很混乱。
这里有什么我遗漏的吗?
问题是垃圾收集器不会自动清理OpenCV图像对象,您需要通过Image . dispose()手动执行。可能是因为它被链接到一个位图对象,由于其原生实现,该对象不会自动清除。
我得到的异常是误导,这个问题是由内存泄漏引起的,最终阻止了序列中的下一个图像成功加载。