本文主要是介绍QImage加载opencv读取的图片出错,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
今天写opencv的时候, 突然发现一件很奇怪的事情, 用摄像头读取的图片, 用QImage加载的时候传入img.data, 一切都很正常, 但是如果我是从保存的图片读取灰度图, 传入img.data, 它会告诉我QImage不能传入memoryview, 但是我打了断点, 也打印过, 它们确实都是memoryview, 而且图片的dtype都是uint8, 就有点莫名其妙。
然后我尝试将img.data改成img.tobytes(), 问题解决, 但是又出现一个新的问题, 就是我从图片中截取一部分, 显示后, 虽然显示出来了, 但是内容却产生了形变, 而我在显示前特地用imshow显示了出来, 说明图片是正常的, 就很诡异。
加载代码如下:
ret, img = self.camera.read()
if ret:img = cv.cvtColor(img, cv.COLOR_BGR2GRAY)height, width = img.shape[:2]img = QImage(img.data, width, height, QImage.Format_Grayscale8)img = QPixmap.fromImage(img)self.p_widget.video_label.setPixmap(img)
最后的解决办法是, 先将图片写入到文件, 然后用QImage直接从文件加载, 问题解决。
但是为什么会扭曲的问题依然不是很清楚, 如果有清楚的大佬, 麻烦解答一下。
memoryview的问题盲猜是表示一个内存数据结构, 这个结构里的数据类型, 字节排序等不一致导致的。
这篇关于QImage加载opencv读取的图片出错的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!