本文目錄一覽:
python如何能採集多個攝像頭的數據
可以,用PYQT+CV2,四個USB連接成功,程序如下,UI要自己搞了,放不下
# -*- coding: utf-8 -*-
import sys#, time
from PyQt5 import QtWidgets
from PyQt5.QtCore import QTimer, QThread, pyqtSignal
from Ui_cv2ui_thread import Ui_MainWindow
import cv2 as cv
from PyQt5.QtGui import QImage, QPixmap
from PyQt5.QtWidgets import (QApplication, QDialog, QFileDialog, QGridLayout,
QLabel, QPushButton, QColorDialog)
import numpy as np
class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent=parent)
self.setupUi(self) #這個一定要在這個最前面位置
# define the slot for pushbutton to save the merged image
self.pushButton.clicked.connect(self.savemergeimage)
self.img = np.ndarray(()) #空的numpy array
self.img1 = np.ndarray(())
self.img2= np.ndarray(())
self.img3= np.ndarray(())
self.img4= np.ndarray(())
self.img4= np.empty([960,1280, 3], int)
self.cap = cv.VideoCapture(3) #注意,由大開到小,很重要
self.cap.set(3, 640) # setup the resolution of CCD
self.cap.set(4, 480)
ret, self.img=self.cap.read()
self.cap1 = cv.VideoCapture(2)
self.cap1.set(3, 640)
self.cap1.set(4, 480)
ret, self.img1=self.cap1.read()
self.cap2 = cv.VideoCapture(1)
self.cap2.set(3, 640)
self.cap2.set(4, 480)
ret, self.img2=self.cap2.read()
self.cap3 = cv.VideoCapture(0)
self.cap3.set(3, 640)
self.cap3.set(4, 480)
ret, self.img3=self.cap3.read()
#time.sleep(1)也許需要延遲,等他準備好
# 初始化一個定時器,在其他條件下用的
#self.timer = QTimer(self)
# 實例化一個線程
self.work0= WorkThread()
self.work0.trigger.connect(self.ccd2)
# 定義時間任務是一次性任務就設定下一行
#self.timer.setSingleShot(True)
# 啟動時間任務,注意一致性
self.work0.start()
# 實例化一個線程
self.work= WorkThread()
# 多線程的信號觸發連接到ccd3
self.work.trigger.connect(self.ccd3)
self.work.start()
# 實例化一個線程
self.work2 = WorkThread()
# 多線程的信號觸發連接到ccd4
self.work2.trigger.connect(self.ccd4)
self.work2.start()
# 實例化一個線程
self.work3 = WorkThread()
# 多線程的信號觸發連接到ccd1
self.work3.trigger.connect(self.ccdmerge)
self.work3.start()
self.work4 = WorkThread()
# 多線程的信號觸發連接到ccd1
self.work4.trigger.connect(self.ccd1)
self.work4.start()
def refreshShowa(self):#顯示ccd1到label1
# 提取圖像的尺寸和通道, 用於將opencv下的image轉換成Qimage
height, width, channel = self.img.shape
bytesPerLine = 3 * width
self.qImg = QImage(self.img.data, width, height, bytesPerLine,
QImage.Format_RGB888).rgbSwapped()
# 將Qimage顯示出來
self.label.setPixmap(QPixmap.fromImage(self.qImg))
def refreshShowb(self):#顯示ccd2到label2
# 提取圖像的尺寸和通道, 用於將opencv下的image轉換成Qimage
height, width, channel = self.img1.shape
bytesPerLine = 3 * width
self.qImg1 = QImage(self.img1.data, width, height, bytesPerLine,
QImage.Format_RGB888).rgbSwapped()
# 將Qimage顯示出來
self.label_2.setPixmap(QPixmap.fromImage( self.qImg1))
def refreshShowc(self):#顯示ccd3到label3
# 提取圖像的尺寸和通道, 用於將opencv下的image轉換成Qimage
height, width, channel = self.img2.shape
bytesPerLine = 3 * width
self.qImg2 = QImage(self.img2.data, width, height, bytesPerLine,
QImage.Format_RGB888).rgbSwapped()
# 將Qimage顯示出來
self.label_3.setPixmap(QPixmap.fromImage( self.qImg2))
def refreshShowd(self):#顯示ccd4到label4
# 提取圖像的尺寸和通道, 用於將opencv下的image轉換成Qimage
height, width, channel = self.img3.shape
bytesPerLine = 3 * width
self.qImg3 = QImage(self.img3.data, width, height, bytesPerLine,
QImage.Format_RGB888).rgbSwapped()
# 將Qimage顯示出來
self.label_4.setPixmap(QPixmap.fromImage( self.qImg3))
def refreshShowe(self):#顯示合併的影像到label6
# 提取圖像的尺寸和通道, 用於將opencv下的image轉換成Qimage
height, width, channel = self.img4.shape
bytesPerLine = 3 * width
self.qImg4 = QImage(self.img4.data, width, height, bytesPerLine,
QImage.Format_RGB888).rgbSwapped()
# 將Qimage顯示出來
self.label_6.setPixmap(QPixmap.fromImage( self.qImg4))
def ccd1(self):
self.cap.set(3, 640)
self.cap.set(4, 480)
ret, self.img = self.cap.read()
self.refreshShowa()
# 啟動另一個線程
self.work0.start()#注意一致性
def ccd2(self, str):
self.cap1.set(3, 640)
self.cap1.set(4, 480)
ret, self.img1 = self.cap1.read()
self.refreshShowb()
self.work.start()#注意一致性
def ccd3(self, str):
self.cap2.set(3, 640)
self.cap2.set(4, 480)
ret, self.img2= self.cap2.read()
self.refreshShowc()
self.work2.start()#注意一致性
def ccd4(self, str):
self.cap3.set(3, 640)
self.cap3.set(4, 480)
ret, self.img3 = self.cap3.read()
self.refreshShowd()
self.work3.start()#注意一致性
def ccdmerge(self, str):
self.img4=np.hstack((self.img, self.img1))
self.img4=np.vstack((self.img4, np.hstack((self.img2, self.img3))))
#print (‘here is a merge process’) 可以用來判斷多線程的執行
self.refreshShowe() #later to remove the remark
self.work4.start()#注意一致性
def savemergeimage(self):
# 調用存儲文件dialog
fileName, tmp = QFileDialog.getSaveFileName(
self, ‘Save Image’, ‘./__data’, ‘*.png *.jpg *.bmp’, ‘*.png’)
if fileName == ”:
return
if self.img.size == 1:
return
# 調用opencv寫入圖像
cv.imwrite(fileName,self.img4)
class WorkThread(QThread): #多線程核心,非常重要
# 定義一個信號
trigger = pyqtSignal(str)
def __int__(self):
# 初始化函數,默認
super(WorkThread, self).__init__()
def run(self):
self.trigger.emit(”)
if __name__ == “__main__”:
app = QtWidgets.QApplication(sys.argv)
w = MainWindow()
w.show()
sys.exit(app.exec_())
Python簡直無所不能!在電腦上如何調用手機攝像頭?教你輕鬆搞定
看到標題,卧槽!Python好牛批~
實際上它真的也牛批!
兄弟們用的台式電腦現在很少裝攝像頭的吧,筆記本就不要說話了!
雖然電腦沒有攝像頭,不過萬一要是想跟女朋友電腦來個視頻啥的,但是咱們不是還有手機嗎 ,哈哈~
我們要做一件事,首先要知道目標是啥吧,那我們要幹啥,在電腦上使用手機攝像頭~
小明:那麼問題來了,要怎麼調用手機攝像頭嘞?
經過我不斷的嘗試,最後讓我找到一個非常厲害的軟件,在局域網中可以自由調用手機攝像頭捕捉到的信息,哎,這不就解決了~
小明:那怎麼把捕捉到的鏡頭,實時的顯示出來嘞?
這個都是小問題,Python那麼多庫,分分鐘就能找到合適的,使用這個庫,我們就可以讓我們的圖像顯示出來了。
我們來實際操作一下
將攝像頭apk安裝在手機上並開始使用,驗證一下顯示情況.
1、將手機和電腦連接在同一個wifi下面。
2、啟動app,可以看見app中有一個鏈接地址。
3、將這個局域網鏈接地址寫入瀏覽器的地址中,然後運行起來。
賬號:admin
密碼:admin
然後就可以看見如下畫面:
這其實是一段視頻,看見這個的話,那就說明你成功了一半。
如何來處理這段視頻呢?這時候就到我們編碼了。
先安裝一下要用的模塊,對沒錯,就是這個神器~
pip install opencv-python
先到圖一下庫,你的窗口名字命名一下,@後面換成之前獲取到的app局域網地址,最後面引入視頻地址,video其實也可以換成你電腦中的視頻地址可以製作成一個播放器。
這樣就將視頻引入進來了,你可以換一個視頻地址,把它變成視頻播放器,然後就需要去讀取引入的視頻地址。
既然實時的,而且要長時間運行,那當然少不了while true。
然後終於可以正常運行了,但無法退出,絕望~
雖然這是一個bug,但是在不同場景中他就不是bug,就比如你如果將這個軟件發送給你的鐵汁,讓他一找不到關閉窗口的辦法,只能重啟電腦,讓你高興一陣,那這個就不是bug。不過他會把你怎麼樣我就不不知道了。
那怎麼解決退出的問題,那不簡單,給它加一個判斷~
然後就退出了,雖然退出了,但是需要做後續處理。
然後電腦調用攝像頭就圓滿搞定!
python如何調用IP攝像頭
import cv2
url = ‘rtsp://admin:password@192.168.1.104:554/11’
cap = cv2.VideoCapture(url)
這是我在網上找的一個程序例子
都差不多是這樣
給一個用戶名密碼和ip地址直接就能連上
python 怎麼打開電腦攝像頭
此方案為朋友LSJ提出並實現的,轉過來供學習用,由於在測試時沒有架設WEB服務器,也沒有做手機上的測試,僅通過PC測試了下,最完整解決方案請參考原出處《DIY手機監控系統》。
方法:
1 下載並安裝VideoCapture、PIL。
2.編碼,3s抓一個圖片並保存
[python] view plain copy
from VideoCapture import Device
import time, string
interval = 2
cam = Device(devnum=0, showVideoWindow=0)
#cam.setResolution(648, 480)
cam.saveSnapshot(‘image.jpg’, timestamp=3, boldfont=1, quality=75)
i = 0
quant = interval * .1
starttime = time.time()
while 1:
lasttime = now = int((time.time() – starttime) / interval)
print i
cam.saveSnapshot(‘image.jpg’, timestamp=3, boldfont=1)
i += 1
while now == lasttime:
now = int((time.time() – starttime) / interval)
time.sleep(quant)
3.寫個網頁,3s刷新一次,如下:
[html] view plain copy
HTML
HEAD
meta http-equiv=”Content-Type” content=”text/html; charset=gb2312″ /
titleWeb監視/title
META http-equiv=”refresh” content=”3″
META http-equiv=”Expires” content=”0″
META http-equiv=”Pragma” content=”no-cache”
/HEAD
body
img src=’image.jpg?mail=dyx1024@gmail.com’ width=”47%” height=”381″/
/body
/HTML
4. 測試:
原創文章,作者:TYRS,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/150270.html