質問編集履歴

5

誤字の改善

2021/06/03 16:14

投稿

tomonari
tomonari

スコア3

test CHANGED
File without changes
test CHANGED
@@ -12,7 +12,7 @@
12
12
 
13
13
 
14
14
 
15
- 環境
15
+ ### 環境
16
16
 
17
17
  OpenCV ver.4.5.2
18
18
 

4

ソースコードの追加

2021/06/03 16:14

投稿

tomonari
tomonari

スコア3

test CHANGED
File without changes
test CHANGED
@@ -146,6 +146,8 @@
146
146
 
147
147
  また、pythonではうまくいったので、ご参考程度にpythonでの画像解析を載せておきます。
148
148
 
149
+ ```python
150
+
149
151
  import cv2
150
152
 
151
153
  import numpy as np
@@ -217,3 +219,5 @@
217
219
  if cv2.waitKey(1) & 0xFF==ord('q'):
218
220
 
219
221
  break
222
+
223
+ ```

3

ソースコードの追加

2021/06/03 16:12

投稿

tomonari
tomonari

スコア3

test CHANGED
File without changes
test CHANGED
@@ -14,7 +14,7 @@
14
14
 
15
15
  環境
16
16
 
17
- OpenCV(おそらくver.4.5.2)
17
+ OpenCV ver.4.5.2
18
18
 
19
19
  Visual studio 2019
20
20
 
@@ -28,6 +28,8 @@
28
28
 
29
29
  ```C++
30
30
 
31
+ # include <iostream>
32
+
31
33
  # include <opencv2/opencv.hpp>
32
34
 
33
35
  # include <opencv2/videoio.hpp>
@@ -42,6 +44,8 @@
42
44
 
43
45
  using namespace cv;
44
46
 
47
+ using namespace std;
48
+
45
49
 
46
50
 
47
51
  #define WINDOW_NAME "Video"
@@ -50,15 +54,15 @@
50
54
 
51
55
  int main() {
52
56
 
53
- cv::Mat img, frame;
57
+ cv::Mat img, frame, gray, gau;
54
58
 
55
59
  cv::namedWindow(WINDOW_NAME, cv::WINDOW_NORMAL);
56
60
 
57
- cv::VideoCapture cap("動画ファイルのパス");
61
+ cv::VideoCapture cap("C:\Users\tomoya\VTS_09_1.mp41116_16.mp4"); //このように、動画ファイルのパスを指定する
58
62
 
59
63
  //cv::moveWindow(WINDOW_NAME, 0, 0);
60
64
 
61
- //cv::setWindowProperty(WINDOW_NAME, cv::WND_PROP_FULLSCREEN, cv::WINDOW_FULLSCREEN);
65
+ //cv::setWindowProperty(WINDOW_NAME, cv::WND_PROP_FULLSCREEN, cv::WINDOW_FULLSCREEN); //フルスクリーンにする
62
66
 
63
67
 
64
68
 
@@ -70,6 +74,10 @@
70
74
 
71
75
  int fps = cap.get(cv::CAP_PROP_FPS); //フレームレート
72
76
 
77
+ cout << "fps=", fps;
78
+
79
+ //cap.set(CAP_PROP_POS_FRAMES, 100); //100フレーム目から再生
80
+
73
81
 
74
82
 
75
83
  for (int CFN = 0; CFN < max_frame; CFN++) {
@@ -78,13 +86,13 @@
78
86
 
79
87
  img = frame;
80
88
 
81
- cv::cvtColor(img, img, COLOR_BGR2GRAY);
89
+ cv::cvtColor(img, gray, COLOR_BGR2GRAY);
82
-
83
-
84
-
90
+
91
+
92
+
85
- // Hough変換のための前処理
93
+ // Hough変換のための前処理(画像の平滑化を行なわないと誤検出が発生しやすい)
86
-
94
+
87
- cv::GaussianBlur(img, img, cv::Size(11, 11), 2, 2);
95
+ cv::GaussianBlur(gray, gau, cv::Size(11, 11), 2, 2);
88
96
 
89
97
 
90
98
 
@@ -92,12 +100,14 @@
92
100
 
93
101
  std::vector<cv::Vec3f> circles;
94
102
 
95
- cv::HoughCircles(img, circles, HOUGH_GRADIENT, 1, 100, 20, 50);
103
+ cv::HoughCircles(gau, circles, HOUGH_GRADIENT, 1, 100, 20, 50);
96
104
 
97
105
 
98
106
 
99
107
  std::vector<cv::Vec3f>::iterator i = circles.begin();
100
108
 
109
+ // std::vector<cv::Vec3f> circles;
110
+
101
111
  for (; i != circles.end(); ++i) {
102
112
 
103
113
  cv::Point center(cv::saturate_cast<int>((*i)[0]), cv::saturate_cast<int>((*i)[1]));
@@ -108,11 +118,21 @@
108
118
 
109
119
  cv::circle(frame, center, 3, cv::Scalar(255, 0, 0), -1);
110
120
 
121
+ // p = (float*)cv::GetSeqElem(circles, i);
122
+
123
+ // cv::circle(img, cv::Point(cvRound(p[0]), cvRound(p[1])), 3, CV_RGB(0, 255, 0), -1, 8, 0);
124
+
125
+ // cv::circle(img, cv::Point(cvRound(p[0]), cvRound(p[1])), cvRound(p[2]), CV_RGB(255, 0, 0), 3, 8, 0);
126
+
127
+ // Point center(cv::Round(circles[i][0]), cv::Round(circles[i][1]));
128
+
111
129
  }
112
130
 
113
131
  cv::imshow("Video", frame);
114
132
 
133
+ //waitKey(1);
134
+
115
- int key = cv::waitKey(27); // 表示のために最低1ms待つ
135
+ int key = cv::waitKey(1); // 表示のために最低1ms待つ
116
136
 
117
137
  if (key == 27) { break; }// esc or enterキーで終了
118
138
 
@@ -121,3 +141,79 @@
121
141
  }
122
142
 
123
143
  ```
144
+
145
+
146
+
147
+ また、pythonではうまくいったので、ご参考程度にpythonでの画像解析を載せておきます。
148
+
149
+ import cv2
150
+
151
+ import numpy as np
152
+
153
+ from matplotlib import pyplot as plt
154
+
155
+ import openpyxl
156
+
157
+
158
+
159
+ #動画の読み込み
160
+
161
+ filepath="動画のパス"
162
+
163
+ cap=cv2.VideoCapture(filepath)
164
+
165
+ while(cap.isOpened()):
166
+
167
+ a=cap.read()
168
+
169
+ if a[0] == False:
170
+
171
+ break
172
+
173
+ #フレームを取得
174
+
175
+ ret,frame=a
176
+
177
+ #グレースケール変換
178
+
179
+ gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
180
+
181
+ gray = cv2.GaussianBlur(gray, (33,33), 1)
182
+
183
+ cimg=gray
184
+
185
+
186
+
187
+ #円検出
188
+
189
+ circles=cv2.HoughCircles(cimg,cv2.HOUGH_GRADIENT,1,20,param1=150,param2=10,minRadius=55,maxRadius=75)
190
+
191
+ #circles=cv2.HoughCircles(cimg,cv2.HOUGH_GRADIENT,1,15,param1=150,param2=17,minRadius=30,maxRadius=50)
192
+
193
+ if circles is not None and len(circles)>0:
194
+
195
+ circles = np.uint16(np.around(circles))
196
+
197
+ for i in circles[0,:]:
198
+
199
+ #外側の円を描く(img,center,radius,BGR,thickness)
200
+
201
+ cv2.circle(frame,(i[0],i[1]),i[2],(255,0,0),2)
202
+
203
+ #円の中心を描く
204
+
205
+ cv2.circle(frame,(i[0],i[1]),1,(255,0,0),-1)
206
+
207
+
208
+
209
+ #フレームを表示
210
+
211
+ cv2.imshow("Frame",frame)
212
+
213
+
214
+
215
+ #qキーが押されたら途中終了
216
+
217
+ if cv2.waitKey(1) & 0xFF==ord('q'):
218
+
219
+ break

2

環境の追加

2021/06/03 16:11

投稿

tomonari
tomonari

スコア3

test CHANGED
File without changes
test CHANGED
@@ -1,12 +1,10 @@
1
- 至急質問があります。
2
-
3
- どなたかわかる方いましたら助けてくださ
1
+ ### 前提・実現したいこと
4
2
 
5
3
 
6
4
 
7
5
  C++でOpenCVを使い、円検出をしたいと思っています。
8
6
 
9
- ネットを駆使し、円検出を行うことに成功したのですが、動画の再生速度が非常に遅くなってしまっています。
7
+ ネットを駆使し、円検出を行うことに成功したのですが、動画の再生速度が非常に遅くなってしまっています。(動画上の1秒が20秒ぐらい)
10
8
 
11
9
  この問題を解決できる方いらっしゃいませんか。
12
10
 
@@ -14,15 +12,13 @@
14
12
 
15
13
 
16
14
 
17
- ### 前提・実現したいこと
15
+ 環境
18
16
 
17
+ OpenCV(おそらくver.4.5.2)
19
18
 
19
+ Visual studio 2019
20
20
 
21
- ここに質問の内容を詳しく書いてください。
21
+ windows10
22
-
23
- (例)PHP(CakePHP)で●●なシステムを作っています。
24
-
25
- ■■な機能を実装中に以下のエラーメッセージが発生しました。
26
22
 
27
23
 
28
24
 

1

ソースコードの追加

2021/06/03 13:40

投稿

tomonari
tomonari

スコア3

test CHANGED
File without changes
test CHANGED
@@ -14,7 +14,23 @@
14
14
 
15
15
 
16
16
 
17
+ ### 前提・実現したいこと
18
+
19
+
20
+
21
+ ここに質問の内容を詳しく書いてください。
22
+
23
+ (例)PHP(CakePHP)で●●なシステムを作っています。
24
+
25
+ ■■な機能を実装中に以下のエラーメッセージが発生しました。
26
+
27
+
28
+
29
+ ### 該当のソースコード
30
+
31
+
32
+
17
- ---C++
33
+ ```C++
18
34
 
19
35
  # include <opencv2/opencv.hpp>
20
36
 
@@ -108,52 +124,4 @@
108
124
 
109
125
  }
110
126
 
111
- ### 前提・実現したいこと
112
-
113
-
114
-
115
- ここに質問の内容を詳しく書いてください。
116
-
117
- (例)PHP(CakePHP)で●●なシステムを作っています。
118
-
119
- ■■な機能を実装中に以下のエラーメッセージが発生しました。
120
-
121
-
122
-
123
- ### 発生している問題・エラーメッセージ
124
-
125
-
126
-
127
127
  ```
128
-
129
- エラーメッセージ
130
-
131
- ```
132
-
133
-
134
-
135
- ### 該当のソースコード
136
-
137
-
138
-
139
- ```ここに言語名を入力
140
-
141
- ソースコード
142
-
143
- ```
144
-
145
-
146
-
147
- ### 試したこと
148
-
149
-
150
-
151
- ここに問題に対して試したことを記載してください。
152
-
153
-
154
-
155
- ### 補足情報(FW/ツールのバージョンなど)
156
-
157
-
158
-
159
- ここにより詳細な情報を記載してください。