主要目的是将OpenCV处理结果在Qt界面进行显示播放等操作
QT Designer中创建窗体,并添加标签
设置标签名为label0,大小为800*600(显示图像范围)
保存并导出py文件
主程序代码
import cv2 as cv
from PyQt5 import QtCore, QtGui, QtWidgets
from Ui_main import Ui_MainWindow
from PyQt5.QtGui import QIcon, QFont, QPixmap, QPainter, QImage
"""
本文件在OpenCV-001课程基础上进行延申,主要增加了QT界面集成功能。
主要功能是利用QT窗口中的labe控件来显示OpenCV结果
主要流程是:
1. 转换BGR到RGB色彩空间
2. 转换OpenCV结果图片为QImage对象
3. 显示图像
"""
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
src = cv.imread("../miao.bmp")
height, width, bytesPerComponent = src.shape
bytesPerLine = bytesPerComponent * width
# 变换彩色空间顺序
cv.cvtColor(src, cv.COLOR_BGR2RGB, src)
# 转为QImage对象
image = QImage(src.data, width, height, bytesPerLine, QImage.Format_RGB888)
ui.label0.setPixmap(QPixmap.fromImage(image))
sys.exit(app.exec_())
效果:
播放视频
import cv2 as cv
from PyQt5 import QtCore, QtGui, QtWidgets
from Ui_main import Ui_MainWindow
from PyQt5.QtGui import QIcon, QFont, QPixmap, QPainter, QImage
import time
"""
本文件在001基础上进行延申,主要增加了QT界面集成功能。
主要功能是利用QT窗口中的labe控件来显示OpenCV结果
主要流程是:
1. 转换BGR到RGB色彩空间
2. 转换OpenCV结果图片为QImage对象
3. 设置标签内容
"""
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
cap = cv.VideoCapture('../v.avi')
FPS = cap.get(cv.CAP_PROP_FPS)
print(FPS)
delay = int(1000 / FPS)
while cap.isOpened():
ret, src = cap.read()
# if frame is read correctly ret is True
if not ret:
print("Can't receive frame (stream end?). Exiting ...")
break
height, width, bytesPerComponent = src.shape
bytesPerLine = bytesPerComponent * width
# 变换彩色空间顺序
#cv.cvtColor(src, cv.COLOR_BGR2RGB, src)
# 转为QImage对象
image = QImage(src.data, width, height, bytesPerLine, QImage.Format_RGB888)
ui.label0.setPixmap(QPixmap.fromImage(image))
# press q to exit
if cv.waitKey(100) & 0xFF == ord('q'):
break
cap.release()
sys.exit(app.exec_())
效果: