摄像头显示与QT读取时间显示
在上一篇文章中,我们设计了一个简单的界面,并且通过Python将其运行了出来,这一次我们将调用摄像头将摄像头获取的图像投放到窗口中
1、新建执行py文件
新建一个main.py文件,将显示界面的程序放入到此Python文件中
然后便可以将mywindow.py中的显示界面的内容删除
main.py中代码如下
from PyQt5.QtWidgets import QMainWindow, QApplication
import sys
from mywindow import mywindow
'''
程序的解释执行文件
'''
if __name__ == '__main__':
# 创建应用程序对象
app = QApplication(sys.argv)
# 创建窗口
ui = mywindow()
# 显示窗口
ui.show()
# 应用程序执行
app.exec_()
sys.exit(0)
2、摄像头显示
1).创建摄像头操作类
创建一个新的cameravide.py文件,作为摄像头的操作类,用来进行摄像头的采集功能,通过界面中的按钮,当需要摄像头采集的时候就调用对象的函数完成
2).实现一个摄像头类
主要功能:添加,打开摄像头,获取摄像头的实时数据,数据进行转换提供给界面
在该类中,需要一个摄像头的类,Python中自带的函数用于调用摄像头并打开摄像头,通过OpenCV的一些函数调用电脑的摄像头;自定义一个函数读取摄像头的数据;定义一个函数将摄像头读取的数据转换,转换为界面能够显示的数据格式,因为摄像头是以BGR方式存储的,所以首先需要转换为RGB格式,调用cvtColor完成后才是RGB格式的画面数据;最后定义一个函数将摄像头关闭
1.__init__函数,完成摄像头的配置打开
def __init__(self):
# VideoCapture类对视频或调用摄像头进行读取操作
# 参数 filename(视频文件);device(摄像头编号)
# 0 表示默认摄像头打开
# 创建摄像头操作对象,打开摄像头
# self.capture表示打开的摄像头对象
self.capture = cv2.VideoCapture(0, cv2.CAP_DSHOW)
# isOpened()函数返回一个布尔值,判断是否摄像头初始化成功
if self.capture.isOpened():
print("isOpened")
# 定义一个多维数组,用来存储获取的画面数据
self.currentframe = np.array([])
2.read_camera函数,读取摄像头数据
def read_camera(self):
ret, pic_data = self.capture.read()
if not ret:
print("获取摄像头失败")
return None
return pic_data
3.camera_to_pic函数,把数据转换成界面能显示的数据格式
def camera_to_pic(self):
pic = self.read_camera()
# 摄像头是以BGR方式存储,首先需要转换为RGB
# 调用cvtColor完成后才是RGB格式的画面数据
self.currentframe = cv2.cvtColor(pic