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的问题盲猜是表示一个内存数据结构, 这个结构里的数据类型, 字节排序等不一致导致的。
原文地址:https://blog.csdn.net/willluckysmile/article/details/137299643
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!