環境
Raspberry Pi 3 B
python 3.7
やりたいこと
pyqt5でGUIを作成し、GUI上にカメラのフレームを出力したいです。
後々、このカメラを使って画像処理もやっていく予定です。
###作成したコード
python
1import sys 2from PyQt5.QtWidgets import * 3from PyQt5.QtGui import * 4from PyQt5.QtCore import * 5import subprocess 6import time 7import numpy as np 8import cv2 9 10 11class Tab1Widget(QWidget): 12 13 def __init__(self): 14 super().__init__() 15 self.title = "カメラテスト" 16 self.left = 50 17 self.top = 50 18 self.width = 1300 19 self.height = 1200 20 self.initUI() 21 22 def initUI(self): 23 24 self.cap = cv2.VideoCapture(0) 25 26 self.cap.set(cv2.CAP_PROP_FRAME_WIDTH,640) 27 self.cap.set(cv2.CAP_PROP_FRAME_HEIGHT,400) 28 self.cap.set(cv2.CAP_PROP_FPS,10) 29 30 self.camera_on = 0 31 32 self.view = QGraphicsView() 33 self.scene = QGraphicsScene() 34 35 btn1 = QPushButton("START", self) 36 btn2 = QPushButton("STOP", self) 37 38 btn1.clicked.connect(self.Start) 39 btn2.clicked.connect(self.Stop) 40 41 label1 = QLabel("カメラ") 42 43 layoutA = QHBoxLayout() 44 layoutA.addWidget(btn1) 45 layoutA.addWidget(btn2) 46 47 layoutB = QVBoxLayout() 48 layoutB.addWidget(label1) 49 layoutB.addWidget(self.view) 50 51 layoutAB = QVBoxLayout() 52 layoutAB.addLayout(layoutA) 53 layoutAB.addLayout(layoutB) 54 55 self.setLayout(layoutAB) 56 self.show() 57 58 def Start(self): 59 self.camera_on = 1 60 self.Camera_On() 61 timer = QTimer(self.view1) 62 timer.timeout.connect(self.Camera_On) 63 timer.start(300) 64 65 def Camera_On(self): 66 ret, cv_img = self.cap.read() 67 if ret == False: 68 return 69 70 self.img_src = cv_img 71 72 cv_img_RGB = cv2.cvtColor(cv_img,cv2.COLOR_BGR2RGB) 73 cv_img_RGB = cv2.resize(cv_img_RGB,(640,500)) 74 #cv_img_RGB = cv2.rectangle(cv_img_RGB, (65, 95), (255, 250), (255, 0, 0), 2, 3) 75 height, width, dim = cv_img_RGB.shape 76 bytesPerLine = dim * width 77 self.image = QImage(cv_img_RGB.data, width, height, bytesPerLine, QImage.Format_RGB888)# 78 self.item = QGraphicsPixmapItem(QPixmap.fromImage(self.image)) 79 self.scene.addItem(self.item) 80 self.view.setScene(self.scene) 81 82 def Stop(): 83 self.camera_on = 0 84 85if __name__ == "__main__": 86 app = QApplication(sys.argv) 87 ex = Tab1Widget() 88 sys.exit(app.exec_())
分からないこと
一応、一つずつ調べ、学習しながら作ったのですが、分からないことがたくさんありますので、ご教授いただけますと幸いです。
Q1.そもそもこのコードで、カメラフレームをGUI上に出力できますか?
Q2.このコードの私の解釈はあっていますか?以下、私の解釈
1.QGraphicsView()[Line32]は作成したカメラフレームをGUI上に出力するためのクラス。
2.QGraphicsScene()[Line33]はQGraphicsView()と一緒に使うクラス(道具)。
3.Start関数内[Line55~60]のQTime関数で0.3秒おきにフレームを更新。
4.cv_img_RGB.shape[Line72]でcv_img_RGBの高さ、幅、奥行き?のデータを取得
私が理解できたのはこれだけでした。
[Line74~77]が特に理解できていません。何をしているのかもわかりません。どうかご教授ください。よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー