版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第怎么使用Python+PyQt5自制監(jiān)控小工具利用opencv的圖像處理功能可以輕松對(duì)計(jì)算機(jī)攝像頭的調(diào)用實(shí)現(xiàn)實(shí)時(shí)圖像的采集效果。
最終將圖片進(jìn)行保存后生成監(jiān)控的歷史視頻記錄。
pipinstallPyQt5
pipinstallpython-opencv
若是沒(méi)有安裝相關(guān)的模塊,可以選擇上述pip的方式進(jìn)行安裝。
接下來(lái)我們將需要的python模塊導(dǎo)入到代碼塊中。
#Itsjustanaliasforthecv2module.
importcv2ascv_
#ItsimportingalltheclassesfromtheQtGuimodule.
fromPyQt5.QtGuiimport*
#ItsimportingalltheclassesfromtheQtCoremodule.
fromPyQt5.QtCoreimport*
#ItsimportingalltheclassesfromtheQtWidgetsmodule.
fromPyQt5.QtWidgetsimport*
#Itsimportingthesysmodule.
importsys
#Itsimportingtheosmodule.
importos
#Itsimportingthetimemodule.
importtime
#Itsimportingthetracebackmodule.
importtraceback
創(chuàng)建名稱為CameraUI的python類,開發(fā)監(jiān)控工具相關(guān)的頁(yè)面組件及布局。
將控件按鈕等對(duì)應(yīng)的槽函數(shù)也放到該類中。
classCameraUI(QWidget):
def__init__(self):
super(CameraUI,self).__init__()
self.init_ui()
definit_ui(self):
self.setWindowTitle(本地監(jiān)控工具公眾號(hào):Python集中營(yíng))
self.setWindowIcon(QIcon(ico.png))
self.resize(600,400)
self.label_view=QLabel()
self.image_path=QLineEdit()
self.image_path.setReadOnly(True)
self.image_path.setPlaceholderText(視頻流圖片保存地址)
self.image_path_btn=QPushButton()
self.image_path_btn.setText(打開)
self.image_path_btn.clicked.connect(self.image_path_btn_clk)
self.video_path=QLineEdit()
self.video_path.setReadOnly(True)
self.video_path.setPlaceholderText(監(jiān)控視頻保存地址)
self.video_path_btn=QPushButton()
self.video_path_btn.setText(打開)
self.video_path_btn.clicked.connect(self.video_path_btn_clk)
self.start_listen_btn=QPushButton()
self.start_listen_btn.setText(開啟監(jiān)控)
self.start_listen_btn.clicked.connect(self.start_listen_btn_clk)
self.brower=QTextBrowser()
self.brower.setReadOnly(True)
self.brower.setFont(QFont(宋體,8))
self.brower.setPlaceholderText(日志處理過(guò)程區(qū)域...)
self.brower.ensureCursorVisible()
hbox=QHBoxLayout()
vbox_left=QVBoxLayout()
vbox_right=QVBoxLayout()
vbox_left.addWidget(self.label_view)
vbox_right_grid1=QGridLayout()
vbox_right_grid1.addWidget(self.image_path,0,0,1,2)
vbox_right_grid1.addWidget(self.image_path_btn,0,2,1,1)
vbox_right_grid1.addWidget(self.video_path,1,0,1,2)
vbox_right_grid1.addWidget(self.video_path_btn,1,2,1,1)
vbox_right_grid2=QGridLayout()
vbox_right_grid2.addWidget(self.brower,0,0,1,3)
vbox_right_grid2.addWidget(self.start_listen_btn,1,0,1,3)
vbox_right.addLayout(vbox_right_grid1)
vbox_right.addLayout(vbox_right_grid2)
hbox.addLayout(vbox_left)
hbox.addLayout(vbox_right)
self.listen_thread=ListenWorkThread(self)
self.listen_thread.message.connect(self.show_message)
self.listen_thread.finished.connect(lambda:self.start_listen_btn.setEnabled(True))
self.setLayout(hbox)
defshow_message(self,text):
cursor=self.brower.textCursor()
cursor.movePosition(QTextCursor.End)
self.brower.append(text)
self.brower.setTextCursor(cursor)
self.brower.ensureCursorVisible()
defimage_path_btn_clk(self):
dir=QFileDialog.getExistingDirectory(self,選擇文件夾,os.getcwd())
self.image_path.setText(dir)
defvideo_path_btn_clk(self):
dir=QFileDialog.getExistingDirectory(self,選擇文件夾,os.getcwd())
self.video_path.setText(dir)
defstart_listen_btn_clk(self):
self.listen_thread.start()
開發(fā)一個(gè)ListenWorkThread類并且繼承自QThread的子線程。
將該線程作為業(yè)務(wù)類實(shí)現(xiàn)調(diào)用本地?cái)z像頭完成監(jiān)控的效果。
classListenWorkThread(QThread):
message=pyqtSignal(str)
finished=pyqtSignal(bool)
def__init__(self,parent=None):
super(ListenWorkThread,self).__init__(parent)
self.parent=parent
self.working=True
def__del__(self):
self.working=False
defrun(self):
try:
image_path=self.parent.image_path.text()
video_path=self.parent.video_path.text()
ifimage_path.strip()==orvideo_path.strip()==:
self.message.emit(相關(guān)路徑設(shè)置不能為空,請(qǐng)檢查設(shè)置!)
return
self.cap=cv_.VideoCapture(0)
self.cap.set(3,300)
self.cap.set(4,400)
ifself.cap.isOpened():
self.message.emit(攝像頭已成功打開!)
n=0
self.message.emit(正在進(jìn)行視頻監(jiān)控中....)
start_time=time.clock()
whileTrue:
ret,img=self.cap.read()
ifos.path.exists(os.path.join(image_path,str(n)+.jpg)):
os.remove(os.path.join(image_path,str(n)+.jpg))
self.save_image(img,str(n),image_path)
time.sleep(0.1)
pixmap_=QPixmap(os.path.join(image_path,str(n)+.jpg))
self.parent.label_view.setPixmap(pixmap_)
n=n+1
self.finished.emit(True)
exceptExceptionase:
traceback.print_exc()
self.message.emit(程序運(yùn)行錯(cuò)誤,請(qǐng)檢查參數(shù)是否設(shè)置正確!)
self.finished.emit(True)
defsave_image(self,image=None,file_name=None,image_path=None):
ifimageisnotNone:
cv_.imwrite(os.path.join(image_path,f
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 加油站應(yīng)急處置預(yù)案演練計(jì)劃方案
- 機(jī)房環(huán)境管控運(yùn)維管理制度
- 安徽合肥市瑤海區(qū)2025-2026學(xué)年第一學(xué)期九年級(jí)期末考試道德與法治試題(含答案)
- 2025年華南農(nóng)業(yè)大學(xué)珠江學(xué)院馬克思主義基本原理概論期末考試模擬題附答案解析
- 命題符號(hào)講解課件
- 2024年齊齊哈爾市職工大學(xué)馬克思主義基本原理概論期末考試題及答案解析(必刷)
- 2024年齊魯醫(yī)藥學(xué)院馬克思主義基本原理概論期末考試題含答案解析(必刷)
- 2025年連城縣幼兒園教師招教考試備考題庫(kù)帶答案解析
- 2024年甘肅衛(wèi)生職業(yè)學(xué)院馬克思主義基本原理概論期末考試題含答案解析(奪冠)
- 2025年巴里坤縣幼兒園教師招教考試備考題庫(kù)附答案解析(必刷)
- 糖皮質(zhì)激素在兒科疾病中的合理應(yīng)用3
- 無(wú)人機(jī)制造裝配工藝智能優(yōu)化
- GB/T 1965-2023多孔陶瓷室溫彎曲強(qiáng)度試驗(yàn)方法
- 六年級(jí)語(yǔ)文非連續(xù)性文本專項(xiàng)訓(xùn)練
- 體育單招核心1700單詞
- 梨樹溝礦區(qū)金礦2022年度礦山地質(zhì)環(huán)境治理計(jì)劃書
- 師德規(guī)范關(guān)愛(ài)學(xué)生
- 太陽(yáng)能光伏發(fā)電裝置的開發(fā)與推廣商業(yè)計(jì)劃書
- 海水淡化用閥門
- GB/T 36377-2018計(jì)量器具識(shí)別編碼
- GB/T 26332.3-2015光學(xué)和光子學(xué)光學(xué)薄膜第3部分:環(huán)境適應(yīng)性
評(píng)論
0/150
提交評(píng)論