关于PyQt5中QtGui.QImage图片显示问题解析 - 网站

关于PyQt5中QtGui.QImage图片显示问题解析

分类:python · 发布时间:2023-03-16 20:45 · 阅读:6790

PyQt作为Qt语言的Python扩展,可以用来方便快速的开发界面应用,本文重点给大家介绍PyQt5中的QtGui.QImage图片显示问题分析,需要的朋友可以参考下

前言

PyQt是Python语言环境的GUI编程解决方案之一,另外还有PyGTK、wxPython等也较为常用。PyQt作为Qt语言的Python扩展,可以用来方便快速的开发界面应用。

PyQt5中的QtGui.QImage图片显示

import os.path as osp import cv2 from qtpy import QtCore from qtpy import QtWidgets from qtpy import QtGui # TracelessLe注:代码示例,不可直接执行 class MainWindow(QtWidgets.QMainWindow): def __init__(self): self.image = QtWidgets.QLabel() def show_img(self, img_path): self.image.clear() img_np = cv2.imread(img_path) width = img_np.shape[1] height = img_np.shape[0] img_rgb_data = cv2.cvtColor(img_np, cv2.COLOR_BGR2RGB) # label_data = QtGui.QImage(img_rgb_data.data, width, height, QtGui.QImage.Format_RGB888)  # 这种方式可能会有部分图片显示有问题 label_data = QtGui.QImage(img_rgb_data.data, width, height, width*3, QtGui.QImage.Format_RGB888)  # 针对RGB图显示的正确方式 self.image.setPixmap(QtGui.QPixmap.fromImage(label_data)) 

图片显示问题分析

如上述代码中讲到的那样,针对RGB三通道图片显示的正确方法是使用:

label_data = QtGui.QImage(img_rgb_data.data, width, height, width*3, QtGui.QImage.Format_RGB888) 

进入QtGui.QImage类,可以看到其支持的图片数据格式有很多:

从QT官网也能找到支持的图像格式:

而图片初始化方法也有很多:

从使用方式来看,主要分为三大类:
(1)传入图像尺寸或长宽,以及图像格式(QImage.Format
(2)传入图像数据,图像尺寸或长宽,以及图像格式
(3)传入图像路径,图像格式

通常对于已经使用OpenCV读取和处理过的图片,我们会使用方式(2)来初始化。

对于常用的RGB三通道图像,初始化时的图像格式一般设为QtGui.QImage.Format_RGB888

而在使用时,正确的使用方式是:

def __init__(self, data: bytes, width: int, height: int, bytesPerLine: int, format: 'QImage.Format')

如果使用

def __init__(self, data: bytes, width: int, height: int, format: 'QImage.Format') 

方法初始化,可能会遇到显示上的一些问题。例如图片斜偏显示、图片黑白条间隔显示、图片加载直接崩溃等异常。

对比两种方法,发现问题在于bytesPerLine: int参数上。该参数指定了bytes型输入数据data在数据排布上的间隔(bytesPerLine)。如果未指定,对于某些输入数据,QtGui.QImage无法正常推断出数据排列格式,则会出现上述中的显示异常问题。

版权说明

本文为原创文章,独家发布在blog.csdn.net/TracelessLe。未经个人允许不得转载。

参考资料

[1] QImage Class | Qt GUI 5.15.8
[2] What is PyQt?
[3] PYQT QTGUI.QIMAGE显示图片异常,发生斜偏异常,且黑白显色_lockhou的博客-CSDN博客
[4] QImage.Format
[5] QImage
[6] QImage与cv::Mat转换; - 时光旅者 - 博客园
[7] 基于PyQt Canvas Matplotlib图形绘制_battlestar的博客-CSDN博客_figurecanvas

到此这篇关于PyQt5中的QtGui.QImage图片显示问题分析的文章就介绍到这了,更多相关PyQt5 QtGui.QImage图片显示内容请搜索0133技术站以前的文章或继续浏览下面的相关文章希望大家以后多多支持0133技术站!

标签:
PyQt5 QtGui.QImage 图片 显示

相关文章

Python轻松管理与操作文件的技巧分享

在日常开发中,我们经常会遇到需要对文件进行操作的场景,如读写文件、文件夹操作等。本文将为大家介绍一些 Python 中处理文件的实用技巧,让你的工作更高效

pytorch实现梯度下降和反向传播图文详细讲解

这篇文章主要介绍了pytorch实现梯度下降和反向传播,反向传播的目的是计算成本函数C对网络中任意w或b的偏导数。一旦我们有了这些偏导数,我们将通过一些常数α的乘积和该数量相对于成本函数的偏导数来更新网络中的权重和偏差

深入理解pytorch库的dockerfile

这篇文章主要介绍了pytorch库的dockerfile,主要包括dockerfile命令,使用指令的注意点及存在的一些问题,本文给大家介绍的非常详细,需要的朋友可以参考下

Selenium多窗口切换解决方案

本文主要介绍了Selenium多窗口切换解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

Python自动化办公之定时发送邮件的实现

python中的schedule模块可以使我们方便简单的使用定时任务,即在特定的时间自动的执行一些任务的功能,本文将用这一模块实现邮件自动发送,需要的可以参考一下

返回分类 返回首页