本篇推文共計1500個字,閱讀時間約2分鍾。web
OpenCV是一個開源的跨平臺計算機視覺庫,輕量,高效,由一系列 C 函數和少許 C++ 類構成,提供了Python、MATLAB等語言的接口,實現了圖像處理和計算機視覺方面的不少通用算法。
算法
OpenCV 是跨平臺的,能夠在 Windows、Linux、Mac OS、Android、iOS 等操做系統上運行。微信
OpenCV 的應用領域很是普遍,包括圖像拼接、圖像降噪、產品質檢、人機交互、人臉識別、動做識別、動做跟蹤、無人駕駛等。網絡
今天的推文裏,咱們來介紹一個利用Python中的Opencv庫用電腦攝像頭捕獲視頻並將視頻實時顯示出來的程序。app
效果圖:編輯器
在這個程序中,整個程序的各控件響應流程以下所示,主界面的視頻框中顯示的是程序槽函數根據定時器設置時間每隔30ms從攝像頭捕獲視頻中抽取的一幀一幀圖像。ide
開發工具準備函數
1.Pycharm 2019.1.3社區版 工具
2.Anaconda(Python 3.6.0,PyQt5)佈局
開發流程
1
由於以前開發程序時候都用了Qt designer,太依賴於Qt designer進行GUI設計,因此本次開發程序時,就採用代碼形式進行控件佈局,固然這得提早構思好界面的控件。
根據程序設計的內容進行主界面的設計。
利用Microsoft Visio設計的程序流程圖以下:
這裏的主界面採用的是QWidget,沒有菜單欄,分別由兩個Push button控件從上到下進行垂直佈局,再將按鍵控件區域和Label控件區域進行水平佈局。
相應代碼爲:
def set_ui(self):
self.__layout_main = QtWidgets.QHBoxLayout() # 總佈局
self.__layout_fun_button = QtWidgets.QVBoxLayout() # 按鍵佈局
self.__layout_data_show = QtWidgets.QVBoxLayout() # 數據(視頻)顯示佈局
self.button_open_camera = QtWidgets.QPushButton('打開相機') # 創建用於打開攝像頭的按鍵
self.button_close = QtWidgets.QPushButton('退出') # 創建用於退出程序的按鍵
self.button_open_camera.setMinimumHeight(50) # 設置按鍵大小
self.button_close.setMinimumHeight(50)
self.button_close.move(10, 100) # 移動按鍵
'''信息顯示'''
self.label_show_camera = QtWidgets.QLabel() # 定義顯示視頻的Label
self.label_show_camera.setFixedSize(641, 481) # 給顯示視頻的Label設置大小爲641x481
'''把按鍵加入到按鍵佈局中'''
self.__layout_fun_button.addWidget(self.button_open_camera) # 把打開攝像頭的按鍵放到按鍵佈局中
self.__layout_fun_button.addWidget(self.button_close) # 把退出程序的按鍵放到按鍵佈局中
'''把某些控件加入到總佈局中'''
self.__layout_main.addLayout(self.__layout_fun_button) # 把按鍵佈局加入到總佈局中
self.__layout_main.addWidget(self.label_show_camera) # 把用於顯示視頻的Label加入到總佈局中
'''總佈局佈置好後就能夠把總佈局做爲參數傳入下面函數'''
self.setLayout(self.__layout_main) # 到這步纔會顯示全部控件
此處進行控件佈局的時候是先設置了總佈局,按鍵佈局。將按鍵佈局設置好了以後,再結合Label標籤在總佈局中進行水平佈局。
2
編寫對應的槽函數代碼:
def button_open_camera_clicked(self):
if self.timer_camera.isActive() == False: # 若定時器未啓動
flag = self.cap.open(self.CAM_NUM) # 參數是0,表示打開筆記本的內置攝像頭,參數是視頻文件路徑則打開視頻
if flag == False: # flag表示open()成不成功
msg = QtWidgets.QMessageBox.warning(self, 'warning', "請檢查相機於電腦是否鏈接正確", buttons=QtWidgets.QMessageBox.Ok)
else:
self.timer_camera.start(30) # 定時器開始計時30ms,結果是每過30ms從攝像頭中取一幀顯示
self.button_open_camera.setText('關閉相機')
else:
self.timer_camera.stop() # 關閉定時器
self.cap.release() # 釋放視頻流
self.label_show_camera.clear() # 清空視頻顯示區域
self.button_open_camera.setText('打開相機')
此處代碼的含義是編輯「打開視頻」按鈕控件的槽函數功能,啓動電腦自帶的攝像頭,並設置截取捕獲圖像的時間。按照設置時間區間返回捕獲圖像。
3
整個程序運行起來以下所示:
以上就是今天介紹的
從攝像頭捕獲視頻並顯示的設計流程
你學會了嗎?
看完本文若有任何疑問,可發送疑問至後臺,工做人員看到後會第一時間爲你解決。如須要本文中涉及的代碼文件,可關注本公衆號,回覆「相機」便可得到下載連接。
圖片|網絡
編輯|一個碼農
你與世界
只差一個
公衆號
喜歡本文的話麻煩你點個「關注」加「在看」
以爲寫得不錯的話能夠點擊下方「喜歡做者」
你的支持是我不斷前行的動力
本文分享自微信公衆號 - 看那個碼農(gh_31e9c1ac7ce4)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。