使用环境:python3.8
平台:Windows10
IDE:PyCharm
博主在编写GUI时需要显示单通道图片,采用的方法是通过Qlabel完成此功能,在此前,显示彩色图像通过Qlabel来做是没问题的,如图所示
但是细心观察会发现,二值化上面的黑白图片是存在乱码的
先附上显示图像的代码:
import cv2 as cv
import numpy as np
from PySide2.QtGui import QPixmap, QImage
# GUI上显示彩色图像
imgResult = cv.cvtColor(imgResult, cv.COLOR_BGR2RGB)
imgResult = img_resize(imgResult,(80,80))
show_imgResult = QImage(imgResult.data, imgResult.shape[1], imgResult.shape[0], QImage.Format_RGB888)
pix_img = QPixmap.fromImage(show_imgResult)
ui.label_Cut.setPixmap(pix_img)
# GUI上显示二值图像
bw = img_resize(bw, (80, 80))
show_bw = QImage(bw .data, bw .shape[1], bw .shape[0], QImage.Format_RGB888)
pix_img = QPixmap.fromImage(show_bw )
ui.label_bw.setPixmap(pix_img)
其中
imgResult
为之前获取到的彩色图像,ui.label_Cut
为GUI上Qlabel的控件
bw
为之前获取到的二值(单通道)图像,ui.label_bw
为GUI上Qlabel的控件
可以发现,彩色图像和二值图像采用的显示方法是一模一样的,但是彩色没问题,二值存在了问题。
在网上查询诸多资料,并没有发现有比较好的解决方案,网上描述的比较多的是关于读取PNG格式图片,在Qlabel中显示不了,采用的方法是将PNG图片通过软件paint3d转换后再读入来解决问题。但是针对此处肯定是不适用的。
二值图片显示不了,彩色能显示,应该是Qt对二值图像显示不兼容,解决Qt的问题比较困难,采用另一种思路,解决图片的问题,将二值图片转变为三通道图片不就行了,但是图片显示出来的颜色不能改变,所幸OpenCV中有这个函数:
bw = cv.cvtColor(bw, cv.COLOR_GRAY2BGR)
所以,在显示黑白图片的代码中添加这段代码就可实现,完整代码如下:
import cv2 as cv
import numpy as np
from PySide2.QtGui import QPixmap, QImage
# GUI上显示彩色图像
imgResult = cv.cvtColor(imgResult, cv.COLOR_BGR2RGB)
imgResult = img_resize(imgResult,(80,80))
show_imgResult = QImage(imgResult.data, imgResult.shape[1], imgResult.shape[0], QImage.Format_RGB888)
pix_img = QPixmap.fromImage(show_imgResult)
ui.label_Cut.setPixmap(pix_img)
# GUI上显示二值图像
bw = img_resize(bw, (80, 80))
# 二值图片转三通道彩色图片
bw = cv.cvtColor(bw, cv.COLOR_GRAY2BGR)
show_bw = QImage(bw .data, bw .shape[1], bw .shape[0], QImage.Format_RGB888)
pix_img = QPixmap.fromImage(show_bw )
ui.label_bw.setPixmap(pix_img)