PyQt十講 | 零基礎使用攝像頭捕獲視頻並顯示



本篇推文共計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

整個程序運行起來以下所示:


以上就是今天介紹的

從攝像頭捕獲視頻並顯示的設計流程

你學會了嗎?


看完本文若有任何疑問,可發送疑問至後臺,工做人員看到後會第一時間爲你解決。如須要本文中涉及的代碼文件,可關注本公衆號,回覆「相機」便可得到下載連接。


END



圖片|網絡

編輯|一個碼農



你與世界

只差一個

公衆號


喜歡本文的話麻煩你點個「關注」加「在看」


以爲寫得不錯的話能夠點擊下方「喜歡做者」


你的支持是我不斷前行的動力

本文分享自微信公衆號 - 看那個碼農(gh_31e9c1ac7ce4)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索