一.前言概述
攝像頭顯示
建立攝像頭操作類:完成攝像頭的采集功能
當需要攝像頭完成一個功能時,就調用攝像頭對象的一個函數去完成
實作一個攝像頭類:
添加
打開攝像頭
擷取攝像頭的實時資料
資料進行轉換提供給界面
界面類:
添加
顯示畫面到界面中
顯示畫面需要循環一直顯示
需要定時器進行定時,定時時間到達就産生信号,關聯上一個槽函數,當信号調用時就會主動調用槽函數;
在qt中存在一個機制:信号可以關聯上另一個函數,另一個函數會在産生這個對應的信号的時候就會調用-----信号槽機制
在元件中存在一些特定的信号,當元件執行某個操作的時候,這時對應的信号就會被激活(信号産生)
由于信号(如點選),可能執行的功能是不一樣的,信号關聯一個槽函數,信号産生會執行槽函數完成功能的執行
需要指定信号與槽函數的關聯,信号要去執行的功能是什麼信号對象.信号.connect(函數)
時間顯示
二. 攝像頭顯示
建立一個python檔案取名cameravideo

讀取攝像頭操作
def read_camera(self):
ret,data = self.capture.read()
if not ret:
print("擷取攝像頭資料失敗")
return None
return data
把資料轉換成界面能顯示的資料格式
def camera_to_pic(self):
pic = self.read_camera()
#攝像頭按BGR存儲,需要轉換為RGB格式
#調用函數cvtColor,其完成後才是RGB格式的畫面資料
self.currentframe = cv2.cvtColor(pic,cv2.COLOR_BGR2RGB)
#設定寬高
#self.currentframe = cv2.cvtColor(self.currentframe,(640,480))
#轉換格式(界面能夠顯示的格式)
#擷取畫面的寬度與高度
height,width = self.currentframe.shape[:2]
#先轉換成QImage類型的圖型/畫面,建立QImage類對象,使用攝像頭的畫面資料
#QImage(data,width,height,format)建立:資料,寬度,高度
qimg = QImage(self.currentframe,width,height,QImage.Format_RGB888)
qpixmap = QPixmap.fromImage(qimg)
return qpixmap
關閉攝像頭
#攝像頭關閉
def close_camera(self):
self.capture.release()
作為攝像頭,擷取資料,顯示畫面的功能
def show_cameradata(self):
# 擷取攝像頭資料,轉換資料
pic = self.cameravideo.camera_to_pic()
# 顯示資料,顯示畫面
self.label.setPixmap(pic)
隻要能夠不斷重複調用這個函數,從攝像頭擷取資料進行顯示
可以通過信号,信号關聯目前函數,隻要信号産生,函數就不斷被調用
信号需要不斷産生,可以通過定時器,定時時間到達就會産生信号
是以這裡要使用指令關聯對象
self.actionopen.triggered.connect(self.on_actionopen)
self.actionclose.triggered.connect(self.on_actionclose)
這裡解釋下actionopen,actionclose是我之前在視窗設計中填寫中文前,所填寫的資訊
建立對應的啟動簽到函數
def on_actionopen(self):
print("on_actionopen")
#啟動攝像頭
self.cameravideo = camera()
#啟動定時器,進行定時,每隔多長時間進行一次擷取攝像頭資料進行顯示
self.timeshow = QTimer(self)
self.timeshow.start(10)
#10毫秒的定時器啟動,每隔10毫秒就會産生一個信号timeout
self.timeshow.timeout().connect(self.show_cameradata)
建立關閉簽到函數
def on_actionclose(self):
print("on_actionclose")
#關閉攝像頭
self.cameravideo.close_camera()
#關閉定時器,不再擷取攝像頭資料進行顯示
self.timeshow.stop()
self.label.setText("攝像頭畫面顯示")
三.時間顯示
這裡我還不會設定動态時間,隻能夠讀取目前時間日期并進行設定
#擷取日期
date = QDate.currentDate()
print(date)
self.dateEdit.setDate(date)
#擷取時間
time = QTime.currentTime()
print(time)
self.timeEdit.setTime(time)
#擷取日期
datatime = QDateTime.currentDateTime()
print(datatime)
四.相關下載下傳
代碼下載下傳:Face_Recognition_Project_2.zip。