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