Ⅰ 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_())
Ⅱ 請問為什麼dsp2812捕獲中斷加入兩句讀(EvaRegs.CAP1FIFO)程序後,要捕獲兩次才能進中斷
DSP捕獲中斷產生需要FIFO中至少有一個有效值(CAPxFIFO標志寄存器中的相應位顯示不等於0)且中斷未被屏蔽。在中斷程序里讀取了2次數據,(cap_previous1 = EvaRegs.CAP1FIFO;cap_current1 = EvaRegs.CAP1FIFO;)使DSP的FIFO堆棧的頂層寄存器沒有有效值,因此每隔一次捕獲才會產生一次中斷。
若將(cap_previous1 = EvaRegs.CAP1FIFO;cap_current1 = EvaRegs.CAP1FIFO;)中去掉一次讀取數據則每次捕獲都會產生中斷。
具體請看《TMS320X281X DSP原理及C程序開發》一書的P177具體解釋。
Ⅲ 空調電機有CAP,CAP1,X2,X3,X4,X5,雙色線,兩條灰線,怎樣分成零線,火線,地線接
看電機上面電路圖接線
Ⅳ 電氣施工中CAP1一160A/4P是什麼意思
是常熟CAP1系列自動轉換開關,160A是額定電流,4P是4級的意思
Ⅳ 求華碩z170-K BIOS文件幫忙cap格式轉換bin 格式的版本要1803
1、下載解壓後要更改文件名
2、下載個人主板對應的bios,解壓後放在c盤根目錄。
3、重啟電腦後按下F4(asus刷bios快捷鍵)。
4、選擇bios文件開始刷,刷完後自動關機。
5、注意:升級過程中,不能斷電。不要用winflash在系統內刷bios,容易出問題且不好解決。
Ⅵ 請問下常熟雙電源轉換開關CAP1的輔助接線端子F11.F12.F14有什麼作用,是否需要接線
好像沒有你說的接線端子吧。
Ⅶ 2812控制無刷直流電機的捕獲中斷的一點疑惑
三個捕獲中斷用的是同一個中斷函數。
Ⅷ 雙電源切換開關故障問題
雙電源開關帶機械和電氣互鎖,不會出現你說的反送電。
常熟開關製造有限公司出的雙電源轉換開關,有幾種型號:
ca1、ca1b系列自動轉換開關;
cap1系列自動轉換開關;
cap2系列自動轉換開關
剛用過他們廠里的雙電源開關,質量還可以。
你可以網路一下(有假冒的網站,注意了,呵呵!電話區號是0512就不會錯)
型號要看你的用途、電流等。
要消防驗收的話,最好找有消防認證的雙電源開關,不然消防驗收通不過!
Ⅸ DSP試編製程序,用捕獲單元1(cap1)測量一個窄負脈沖的寬度。假設CLKIN=6MHz。 要求1.只寫編程思路2.畫圖
信息工程的?
Ⅹ CAP1-63/ER/4是什麼電器的型號,而且是什麼意思
自動轉換開關 CA1-250 CA1-400 CA1-630 CA1-800 CAP1-32 CAP1-63 CAP1-100 CAP1-125 CAP1-140 CAP1-160 CAP1-200 CAP1-225 CAP1-250 CAP1-315 CAP1-350 CAP1-400 JR,JS (經濟型)自動轉換開關自動控制器 ER, ES, EF (電子型) ZR, ZS, ZF (智能型) ZTR, ZTS, ZTF (通訊型)