pyqt和opencv结合01:读取图像、显示

在这里插入图片描述

1 、opencv读取图像用于pyqt显示

python 复制代码
# image = cv2.imread(file_path)
   image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
      # 将图像转换为 Qt 可接受的格式
   height, width, channel = image.shape
   bytes_per_line = 3 * width

   q_image = QImage(image.data, width, height, bytes_per_line, QImage.Format_RGB888)
   pixmap = QPixmap.fromImage(q_image)
   self.image_label.setPixmap(pixmap)
   self.image_label.setScaledContents(True)

2、 opencv读取不了中文路径报错解决方式

python 复制代码
def read_chinese(file):
    image_numpy_data = cv2.imdecode(np.fromfile(file, dtype=np.uint8), -1)
    #返回numpy的ndarray
    return image_numpy_data

3 、pyqt中label默认不显示如何设置成显示

python 复制代码
self.image_label.setStyleSheet("border: 5px solid red;")

4、pyqt中label默认文字位于左侧如何设置成居中显示

python 复制代码
from PyQt5.QtCore import Qt
self.image_label.setAlignment(Qt.AlignCenter)

5、pyqt中label默认显示图像大小会裁剪如何设置成自适应

    self.image_label.setScaledContents(True)

6、pyqt中打开文件对话框选择文件

file_path, _ = QFileDialog.getOpenFileName(self, "Open Image File", "", "Image files (*.jpg *.png)")

以下是完整的代码:

python 复制代码
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QLabel, QPushButton, QVBoxLayout, QWidget, QFileDialog
from PyQt5.QtGui import QPixmap, QImage
import cv2
import numpy as np

from PyQt5.QtCore import Qt


def read_chinese(file):
    image_numpy_data = cv2.imdecode(np.fromfile(file, dtype=np.uint8), -1)
    #返回numpy的ndarray
    return image_numpy_data

class ImageReaderApp(QMainWindow):
    def __init__(self):
        super().__init__()

        self.setWindowTitle("Image Reader")
        self.setGeometry(100, 100, 400, 300)
        self.setMinimumSize(400, 300)  # 设置最小尺寸
        self.central_widget = QWidget()
        self.setCentralWidget(self.central_widget)

        self.layout = QVBoxLayout()
        self.central_widget.setLayout(self.layout)

        self.image_label = QLabel()
        self.image_label.setText("图片展示区")
        self.image_label.setAlignment(Qt.AlignCenter)
        self.image_label.setStyleSheet("border: 5px solid red;")
        self.layout.addWidget(self.image_label)

        self.select_button = QPushButton("Select Image")
        self.select_button.clicked.connect(self.select_image)
        self.layout.addWidget(self.select_button)


    def select_image(self):
        file_path, _ = QFileDialog.getOpenFileName(self, "Open Image File", "", "Image files (*.jpg *.png)")
        if file_path:
            # 使用 OpenCV 读取图像FD
            # image = cv2.imread(file_path)
            # 将图像从 BGR 格式转换为 RGB 格式
            image = read_chinese(file_path)

            image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
            # 将图像转换为 Qt 可接受的格式
            height, width, channel = image.shape
            bytes_per_line = 3 * width

            q_image = QImage(image.data, width, height, bytes_per_line, QImage.Format_RGB888)
            pixmap = QPixmap.fromImage(q_image)
            self.image_label.setPixmap(pixmap)
            self.image_label.setScaledContents(True)


if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = ImageReaderApp()
    window.show()
    sys.exit(app.exec_())
相关推荐
飞凌嵌入式2 分钟前
飞凌嵌入式T113-i开发板RISC-V核的实时应用方案
人工智能·嵌入式硬件·嵌入式·risc-v·飞凌嵌入式
sinovoip4 分钟前
Banana Pi BPI-CanMV-K230D-Zero 采用嘉楠科技 K230D RISC-V芯片设计
人工智能·科技·物联网·开源·risc-v
搏博26 分钟前
神经网络问题之一:梯度消失(Vanishing Gradient)
人工智能·机器学习
z千鑫27 分钟前
【人工智能】深入理解PyTorch:从0开始完整教程!全文注解
人工智能·pytorch·python·gpt·深度学习·ai编程
YRr YRr35 分钟前
深度学习:神经网络的搭建
人工智能·深度学习·神经网络
威桑37 分钟前
CMake + mingw + opencv
人工智能·opencv·计算机视觉
爱喝热水的呀哈喽41 分钟前
torch张量与函数表达式写法
人工智能·pytorch·深度学习
肥猪猪爸1 小时前
使用卡尔曼滤波器估计pybullet中的机器人位置
数据结构·人工智能·python·算法·机器人·卡尔曼滤波·pybullet
大白要努力!1 小时前
Android opencv使用Core.hconcat 进行图像拼接
android·opencv
LZXCyrus2 小时前
【杂记】vLLM如何指定GPU单卡/多卡离线推理
人工智能·经验分享·python·深度学习·语言模型·llm·vllm