網(wǎng)站首頁(yè) 編程語(yǔ)言 正文
前言
PyQt是Python語(yǔ)言環(huán)境的GUI編程解決方案之一,另外還有PyGTK、wxPython等也較為常用。PyQt作為Qt語(yǔ)言的Python擴(kuò)展,可以用來(lái)方便快速的開(kāi)發(fā)界面應(yīng)用。
PyQt5中的QtGui.QImage圖片顯示
import os.path as osp import cv2 from qtpy import QtCore from qtpy import QtWidgets from qtpy import QtGui # TracelessLe注:代碼示例,不可直接執(zhí)行 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) # 這種方式可能會(huì)有部分圖片顯示有問(wèn)題 label_data = QtGui.QImage(img_rgb_data.data, width, height, width*3, QtGui.QImage.Format_RGB888) # 針對(duì)RGB圖顯示的正確方式 self.image.setPixmap(QtGui.QPixmap.fromImage(label_data))
圖片顯示問(wèn)題分析
如上述代碼中講到的那樣,針對(duì)RGB三通道圖片顯示的正確方法是使用:
label_data = QtGui.QImage(img_rgb_data.data, width, height, width*3, QtGui.QImage.Format_RGB888)
進(jìn)入QtGui.QImage類,可以看到其支持的圖片數(shù)據(jù)格式有很多:
從QT官網(wǎng)也能找到支持的圖像格式:
而圖片初始化方法也有很多:
從使用方式來(lái)看,主要分為三大類:
(1)傳入圖像尺寸或長(zhǎng)寬,以及圖像格式(QImage.Format
)
(2)傳入圖像數(shù)據(jù),圖像尺寸或長(zhǎng)寬,以及圖像格式
(3)傳入圖像路徑,圖像格式
通常對(duì)于已經(jīng)使用OpenCV讀取和處理過(guò)的圖片,我們會(huì)使用方式(2)來(lái)初始化。
對(duì)于常用的RGB三通道圖像,初始化時(shí)的圖像格式一般設(shè)為QtGui.QImage.Format_RGB888
。
而在使用時(shí),正確的使用方式是:
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')
方法初始化,可能會(huì)遇到顯示上的一些問(wèn)題。例如圖片斜偏顯示、圖片黑白條間隔顯示、圖片加載直接崩潰等異常。
對(duì)比兩種方法,發(fā)現(xiàn)問(wèn)題在于bytesPerLine: int
參數(shù)上。該參數(shù)指定了bytes
型輸入數(shù)據(jù)data
在數(shù)據(jù)排布上的間隔(bytesPerLine
)。如果未指定,對(duì)于某些輸入數(shù)據(jù),QtGui.QImage
無(wú)法正常推斷出數(shù)據(jù)排列格式,則會(huì)出現(xiàn)上述中的顯示異常問(wèn)題。
版權(quán)說(shuō)明
本文為原創(chuàng)文章,獨(dú)家發(fā)布在blog.csdn.net/TracelessLe。未經(jīng)個(gè)人允許不得轉(zhuǎn)載。
參考資料
[1] QImage Class | Qt GUI 5.15.8
[2] What is PyQt?
[3] PYQT QTGUI.QIMAGE顯示圖片異常,發(fā)生斜偏異常,且黑白顯色_lockhou的博客-CSDN博客
[4] QImage.Format
[5] QImage
[6] QImage與cv::Mat轉(zhuǎn)換; - 時(shí)光旅者 - 博客園
[7] 基于PyQt Canvas Matplotlib圖形繪制_battlestar的博客-CSDN博客_figurecanvas
原文鏈接:https://blog.csdn.net/TracelessLe/article/details/123339133
相關(guān)推薦
- 2023-03-26 CSS填充和寬高詳解_基礎(chǔ)教程
- 2022-03-10 搭建Redis服務(wù)器步驟詳細(xì)介紹_Redis
- 2022-09-17 ComposeDesktop開(kāi)發(fā)桌面端多功能APK工具_(dá)Android
- 2022-09-16 Pandas缺失值刪除df.dropna()的使用_python
- 2023-10-09 所有的引用類型都有自由可拓展性怎么理解
- 2022-11-23 linux下解決?git?clone每次都要輸入用戶名密碼問(wèn)題(推薦)_linux shell
- 2022-01-19 el-table 定位 跳轉(zhuǎn) 至指定 行 位置,保證數(shù)據(jù)更新后位置不變
- 2022-03-30 C++歸并排序算法詳解_C 語(yǔ)言
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過(guò)濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡(jiǎn)單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支