当前位置:   article > 正文

PyQt5组件之QLabel显示图像和视频_pyqt 显示图像

pyqt 显示图像

目录

一、显示图像和视频

1、显示图像 

2、显示视频

二、QtDesigner 窗口简单介绍

三、相关函数

1、打开本地图片

2、保存图片到本地

3、打开文件夹

4、打开本地文本文件并显示

5、保存文本到本地

6、关联函数

7、图片 “.png” | “.jpn” Label 自适应显示

8、QLabel常用方法


一、显示图像和视频

1、显示图像 

  • 按路径显示
  1. from PyQt5 import QtWidgets, QtGui, QtCore
  2. from PyQt5.QtCore import Qt
  3. app = QtWidgets.QApplication([])
  4. label = QtWidgets.QLabel()
  5. label.setGeometry(QtCore.QRect(100, 180, 500, 500))
  6. pixmap = QtGui.QPixmap(r"Angry.png") # 创建相应的QPixmap对象
  7. label.setPixmap(pixmap) # 显示图像
  8. label.setAlignment(Qt.AlignCenter) # 图像居中
  9. label.show()
  10. app.exec()
  • 显示numpy数组
  1. from PyQt5 import QtWidgets, QtGui, QtCore
  2. from PyQt5.QtCore import Qt
  3. import numpy as np
  4. app = QtWidgets.QApplication([])
  5. label = QtWidgets.QLabel()
  6. label.setGeometry(QtCore.QRect(100, 180, 500, 500))
  7. img = np.random.random((500,500,3))
  8. height, width, depth = img.shape
  9. # 关键代码
  10. image = QtGui.QImage(img, width, height, QtGui.QImage.Format_RGB888) # 如果没有depth*width,图像可能会扭曲
  11. pixmap = QtGui.QPixmap(image) # 创建相应的QPixmap对象
  12. label.setPixmap(pixmap) # 显示图像
  13. label.setAlignment(Qt.AlignCenter) # 图像居中
  14. label.show()
  15. app.exec()

2、显示视频

  • 按路径
  1. from PyQt5 import QtWidgets, QtGui, QtCore
  2. from PyQt5.QtCore import Qt
  3. import cv2
  4. app = QtWidgets.QApplication([])
  5. label = QtWidgets.QLabel()
  6. label.setGeometry(QtCore.QRect(100, 180, 500, 500))
  7. video = cv2.VideoCapture(r"G:\00 讲解用\C3D\C3D\Pytorch_C3D_Feature_Extractor-master\data\miayuan\videos\1\1.mp4")
  8. # 获取输入视频的宽度
  9. width = int(video.get(cv2.CAP_PROP_FRAME_WIDTH))
  10. # 获取输入视频的高度
  11. height = int(video.get(cv2.CAP_PROP_FRAME_HEIGHT))
  12. # 获取视频帧数
  13. frame_number = int(video.get(cv2.CAP_PROP_FRAME_COUNT))
  14. # 获取输入视频的帧率
  15. frame_rate = int(video.get(cv2.CAP_PROP_FPS))
  16. ratio1 = width / 500 # (label 宽度)
  17. ratio2 = height / 500 # (label 高度)
  18. ratio = max(ratio1, ratio2)
  19. while video.isOpened():
  20. ret, frame = video.read()
  21. # 将图片转换为 Qt 格式
  22. # QImage:QImage(bytes,width,height,format)
  23. picture = QtGui.QImage(frame, width, height, 3 * width, QtGui.QImage.Format_RGB888)
  24. pixmap = QtGui.QPixmap.fromImage(picture)
  25. # 按照缩放比例自适应 label 显示
  26. pixmap.setDevicePixelRatio(ratio)
  27. label.setPixmap(pixmap)
  28. label.show()
  29. cv2.waitKey(10)
  30. video.release() # 释放资源
  31. app.exec()
  •  调用摄像头
  1. from PyQt5 import QtWidgets, QtGui, QtCore
  2. import cv2
  3. app = QtWidgets.QApplication([])
  4. label = QtWidgets.QLabel()
  5. label.setGeometry(QtCore.QRect(100, 180, 500, 500))
  6. # 更改改代码即可
  7. video = cv2.VideoCapture(0)
  8. # 获取输入视频的宽度
  9. width = int(video.get(cv2.CAP_PROP_FRAME_WIDTH))
  10. # 获取输入视频的高度
  11. height = int(video.get(cv2.CAP_PROP_FRAME_HEIGHT))
  12. # 获取视频帧数
  13. frame_number = int(video.get(cv2.CAP_PROP_FRAME_COUNT))
  14. # 获取输入视频的帧率
  15. frame_rate = int(video.get(cv2.CAP_PROP_FPS))
  16. ratio1 = width / 500 # (label 宽度)
  17. ratio2 = height / 500 # (label 高度)
  18. ratio = max(ratio1, ratio2)
  19. while video.isOpened():
  20. ret, frame = video.read()
  21. # 将图片转换为 Qt 格式
  22. # QImage:QImage(bytes,width,height,format)
  23. picture = QtGui.QImage(frame, width, height, 3 * width, QtGui.QImage.Format_RGB888)
  24. pixmap = QtGui.QPixmap.fromImage(picture)
  25. # 按照缩放比例自适应 label 显示
  26. pixmap.setDevicePixelRatio(ratio)
  27. label.setPixmap(pixmap)
  28. label.show()
  29. cv2.waitKey(10)
  30. video.release() # 释放资源
  31. app.exec()

二、QtDesigner 窗口简单介绍

三、相关函数

1、打开本地图片

  1. # 选择本地图片上传
  2. def openImage(self):
  3. global imgNamepath # 这里为了方便别的地方引用图片路径,将其设置为全局变量
  4. # 弹出一个文件选择框,第一个返回值imgName记录选中的文件路径+文件名,第二个返回值imgType记录文件的类型
  5. # QFileDialog就是系统对话框的那个类第一个参数是上下文,第二个参数是弹框的名字,第三个参数是默认打开的路径,第四个参数是需要的格式
  6. imgNamepath, imgType = QFileDialog.getOpenFileName(self.centralwidget, "选择图片",
  7. "D:\\","*.jpg;;*.png;;All Files(*)")
  8. # 通过文件路径获取图片文件,并设置图片长宽为label控件的长、宽
  9. img = QtGui.QPixmap(imgNamepath).scaled(self.label_3.width(), self.label_3.height())
  10. # 在label控件上显示选择的图片
  11. self.label_3.setPixmap(img)
  12. # 显示所选图片的路径
  13. self.lineEdit_3.setText(imgNamepath)

2、保存图片到本地

  • (1)保存图片到本地的第一种方式:首先把图片所在label控件截图,然后打开一个保存文件的弹出框,最后保存截图到选中的路径。
  1. def saveImage(self):
  2. screen = QApplication.primaryScreen()
  3. pix = screen.grabWindow(self.label_4.winId())
  4. fpath, ftype = QFileDialog.getSaveFileName(self.centralwidget, "保存图片", "d:\\", "*.jpg;;*.png;;All Files(*)")
  5. pix.save(fpath)
  • (2)保存图片到本地的第二种方式:首先提取相对应Qlabel中的图片,然后打开一个保存文件的弹出框,最后保存图片到选中的路径。
  1. def saveImage(self):
  2. # 提取Qlabel中的图片
  3. img = self.label_4.pixmap().toImage()
  4. fpath, ftype = QFileDialog.getSaveFileName(self.centralwidget, "保存图片", "d:\\", "*.jpg;;*.png;;All Files(*)")
  5. img.save(fpath)

3、打开文件夹

  1. # 打开文件夹(目录)
  2. def openDirectory(self):
  3. fd = QFileDialog.getExistingDirectory(self.centralwidget, "选择文件夹", "")
  4. # 这里的label_directoryPath要根据项目替换成自己的组件
  5. self.label_directoryPath.setText(fd)

4、打开本地文本文件并显示

  1. # 选择文本文件上传
  2. def openTextFile(self): # 选择文本文件上传
  3. fd, fp = QFileDialog.getOpenFileName(self.centralwidget, "选择文件", "d:\\", "*.txt;;All Files(*)")
  4. f = open(fd, 'r')
  5. self.label_txt.setText(f.read())
  6. self.label_filePath.setText(fd)
  7. f.close()

5、保存文本到本地

  1. # 保存文本文件
  2. def saveTextFile(self):
  3. fd, fp = QFileDialog.getSaveFileName(self.centralwidget, "保存文件", "d:\\", "*.txt;;All Files(*)")
  4. f = open(fd, 'w')
  5. f.write(self.label_txt.text())
  6. f.close()

6、关联函数

  1. # 按钮关联函数
  2. self.pushButton_2.clicked.connect(self.openImage)
  3. self.pushButton_3.clicked.connect(self.startAction)
  4. self.pushButton_4.clicked.connect(self.saveImage)

7、图片 “.png” | “.jpn” Label 自适应显示

  1. # filepath: 文件完整路径
  2. pixmap = QPixmap(filepath)
  3. ratio1 = pixmap.width() / 1920 (label 宽度)
  4. ratio2 = pixmap.height() / 1080 (label 高度)
  5. ration = max(ratio1, ratio2)
  6. pixmap.setDevicePixelRatio(ration)
  7. self.FileDisplay.setPixmap(pixmap)

8、QLabel常用方法

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/114959
推荐阅读
相关标签
  

闽ICP备14008679号