日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學(xué)無(wú)先后,達(dá)者為師

網(wǎng)站首頁(yè) 編程語(yǔ)言 正文

關(guān)于PyQt5中QtGui.QImage圖片顯示問(wèn)題解析_python

作者:TracelessLe ? 更新時(shí)間: 2022-05-08 編程語(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

欄目分類
最近更新