在这里插入图片描述
1 、opencv读取图像用于pyqt显示
# 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读取不了中文路径报错解决方式
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默认不显示如何设置成显示
self.image_label.setStyleSheet("border: 5px solid red;")
4、pyqt中label默认文字位于左侧如何设置成居中显示
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)")
以下是完整的代码:
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_())