qlabel opencv 显示图片
时间: 2025-03-05 21:39:26 浏览: 9
使用OpenCV在Qt的QLabel控件中显示图像
为了实现这一功能,可以采用如下方法:
将OpenCV读取到的Mat
对象转换成PyQt可识别的形式——即先将其颜色空间由BGR转为RGB(因为OpenCV默认的颜色顺序是BGR),然后再创建一个QImage
实例来承载这个图像数据。最后利用QPixmap
从该QImage
生成,并设置给指定的QLabel
。
具体操作过程如下所示[^2]:
def pushbutton_function(self):
Img = cv2.imread('JP1.JPG')
image_height, image_width, image_depth = Img.shape
# 转换色彩空间 BGR -> RGB
QIm = cv2.cvtColor(Img, cv2.COLOR_BGR2RGB)
# 创建 QImage 对象
q_image = QImage(
QIm.data,
image_width,
image_height,
image_width * image_depth,
QImage.Format_RGB888
)
# 设置 QLabel 的 pixmap 属性以展示图片
self.label.setPixmap(QPixmap.fromImage(q_image))
对于灰度图的情况,则需额外处理一步即将其转化为RGB模式以便于正常渲染[^3]:
rgb_img = cv2.cvtColor(img, cv2.COLOR_GRAY2RGB)
q_img = QImage(
rgb_img,
rgb_img.shape[1],
rgb_img.shape[0],
rgb_img.shape[1]*3,
QImage.Format_RGB888
)
pix = QPixmap(q_img).scaled(ui.label_vision.width(), ui.label_vision.height())
ui.label_vision.setPixmap(pix)
值得注意的是,在某些情况下可能会遇到图像显示异常的问题,比如图像被拉伸或压缩变形等。这通常是因为没有正确调整QImage
构造参数中的字节宽度所致。确保传递给QImage
构造器的最后一项参数能够准确反映每一行像素所占用的实际内存大小是非常重要的[^1]。
相关推荐


















