質問編集履歴

1

ソースコードの改善

2020/10/22 01:11

投稿

yuumura
yuumura

スコア3

test CHANGED
File without changes
test CHANGED
@@ -14,9 +14,7 @@
14
14
 
15
15
  ```
16
16
 
17
- (オリジナルのエラーメッセージVideoCaptureができないことを示てる)
17
+ VideoCaptureが読み込めずFalseとなってしまう。
18
-
19
- failed in opening VideoCapture
20
18
 
21
19
  ```
22
20
 
@@ -30,191 +28,23 @@
30
28
 
31
29
 
32
30
 
33
- #いっぱい書いてあるけどできてないのはcv2.VideoCapture(0)
34
31
 
35
- import sys, os
36
-
37
- from PyQt5.QtWidgets import *
38
-
39
- from PyQt5.QtCore import *
40
-
41
- from PyQt5.QtGui import *
42
32
 
43
33
  import cv2
44
34
 
35
+
36
+
37
+ cap_cam = cv2.VideoCapture(0)
38
+
45
- import numpy as np
39
+ print(type(cap_cam))
40
+
41
+ # <class 'cv2.VideoCapture'>
46
42
 
47
43
 
48
44
 
49
- class VideoCaptureView(QGraphicsView):
50
-
51
- """ ビデオキャプチャ """
52
-
53
- repeat_interval = 200 # ms 間隔で画像更新
45
+ print(cap_cam.isOpened())
54
46
 
55
47
 
56
-
57
- def __init__(self, parent = None):
58
-
59
- """ コンストラクタ(インスタンスが生成される時に呼び出される) """
60
-
61
- super(VideoCaptureView, self).__init__(parent)
62
-
63
-
64
-
65
- # 変数を初期化
66
-
67
- self.pixmap = None
68
-
69
- self.item = None
70
-
71
-
72
-
73
-
74
-
75
-
76
-
77
-
78
-
79
- #できてないとこ
80
-
81
-
82
-
83
-
84
-
85
- # VideoCapture (カメラからの画像取り込み)を初期化
86
-
87
- self.capture = cv2.VideoCapture(0)
88
-
89
-
90
-
91
- if self.capture.isOpened() is False:
92
-
93
- raise IOError("failed in opening VideoCapture")
94
-
95
-
96
-
97
-
98
-
99
-
100
-
101
-
102
-
103
-
104
-
105
-
106
-
107
- # ウィンドウの初期化
108
-
109
- self.scene = QGraphicsScene() # 描画用キャンバスを作成
110
-
111
- self.setScene(self.scene)
112
-
113
- self.setVideoImage()
114
-
115
-
116
-
117
- # タイマー更新 (一定間隔でsetVideoImageメソッドを呼び出す)
118
-
119
- self.timer = QTimer(self)
120
-
121
- self.timer.timeout.connect(self.setVideoImage)
122
-
123
- self.timer.start(self.repeat_interval)
124
-
125
-
126
-
127
- def setVideoImage(self):
128
-
129
- """ ビデオの画像を取得して表示 """
130
-
131
- ret, cv_img = self.capture.read() # ビデオキャプチャデバイスから画像を取得
132
-
133
- if ret == False:
134
-
135
- return
136
-
137
- cv_img = cv2.cvtColor(cv_img,cv2.COLOR_BGR2RGB) # 色変換 BGR->RGB
138
-
139
-
140
-
141
- cv_img = self.processing(cv_img)
142
-
143
-
144
-
145
- height, width, dim = cv_img.shape
146
-
147
- bytesPerLine = dim * width # 1行辺りのバイト数
148
-
149
-
150
-
151
- #cv_img = self.processing(cv_img)
152
-
153
-
154
-
155
- self.image = QImage(cv_img.data, width, height, bytesPerLine, QImage.Format_RGB888)
156
-
157
- if self.pixmap == None: # 初回はQPixmap, QGraphicPixmapItemインスタンスを作成
158
-
159
- self.pixmap = QPixmap.fromImage(self.image)
160
-
161
- self.item = QGraphicsPixmapItem(self.pixmap)
162
-
163
- self.scene.addItem(self.item) # キャンバスに配置
164
-
165
- else:
166
-
167
- self.pixmap.convertFromImage(self.image) # 2回目以降はQImage, QPixmapを設定するだけ
168
-
169
- self.item.setPixmap(self.pixmap)
170
-
171
-
172
-
173
- def processing(self, src):
174
-
175
- """ 画像処理 """
176
-
177
- im = src.copy()
178
-
179
-
180
-
181
-
182
-
183
-
184
-
185
- dst = im
186
-
187
-
188
-
189
- return dst
190
-
191
-
192
-
193
- if __name__ == '__main__':
194
-
195
- app = QApplication(sys.argv)
196
-
197
- app.aboutToQuit.connect(app.deleteLater)
198
-
199
-
200
-
201
- main = QMainWindow() # メインウィンドウmainを作成
202
-
203
- main.setWindowTitle("Video Capture")
204
-
205
- viewer = VideoCaptureView() # VideoCaptureView ウィジエットviewを作成
206
-
207
- main.setCentralWidget(viewer) # mainにviewを埋め込む
208
-
209
- main.show()
210
-
211
-
212
-
213
- app.exec_()
214
-
215
-
216
-
217
- viewer.capture.release()
218
48
 
219
49
  ```
220
50