将 IplImage IPL_DEPTH_32S 转换为 QImage Format_RGB32 最快的方法是什么?
我需要从摄像头捕捉图片并将其显示在表格上,频率为每秒 30 帧。我尝试使用 QImage 构造函数:
QImage qImage((uchar *) image->imageData, image->width, image->height, QImage::Format_RGB32);
但此后图像已损坏。那么,我怎样才能快速做到这一点(我认为将像素逐像素放入 QImage 不是一个好的决定)?
在开始之前,OpenCV 使用默认BGR格式。不是RGB!所以在创建之前QImage
你需要转换你的IplImage
转换为 RGB:
cvtColor(image, image, CV_BGR2RGB);
然后你可以:
QImage qImage((uchar*) image->imageData, image->width, image->height, QImage::Format_RGB32);
注意上面的构造函数 http://doc.qt.nokia.com/4.7-snapshot/qimage.html#QImage-5不会像您想象的那样复制数据,如文档所述:
缓冲区必须在 QImage 的整个生命周期内保持有效
所以如果你有性能问题不是因为转换过程。这很可能是由您正在使用的绘图方法引起的(问题中未共享)。总结一下很多废话,你应该渲染QImage到 OpenGL 纹理 https://stackoverflow.com/questions/9011108/image-scaling-keepaspectratiobyexpanding-through-opengl并让视频卡为您完成所有绘图工作。
您的问题有点误导,因为您的主要目标不是找到最快的转换方法,而是一种实际有效的方法,因为您的方法无效。
当你说时,要记住另一件重要的事情:
此后图像已损坏
你必须知道,这完全是模糊的,它对我们没有任何帮助,因为造成这种效果的原因有很多,如果没有源代码,就不可能确定你做错了什么。共享原始图像和损坏的图像可能会提供一些有关问题所在的线索。
现在就这样。祝你好运。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)