回答編集履歴

2

追記

2018/02/10 14:43

投稿

episteme
episteme

スコア16614

test CHANGED
@@ -25,3 +25,67 @@
25
25
 
26
26
 
27
27
  って書かれてるとしたら、納得する?
28
+
29
+
30
+
31
+ [追記]
32
+
33
+
34
+
35
+ OpenCV 3.4 のコードから VideoCapture::set() を追っかけてみた
36
+
37
+
38
+
39
+ ```C++
40
+
41
+ bool VideoCapture::set(int propId, double value)
42
+
43
+ {
44
+
45
+ if (!icap.empty())
46
+
47
+ return icap->setProperty(propId, value);
48
+
49
+ return cvSetCaptureProperty(cap, propId, value) != 0;
50
+
51
+ }
52
+
53
+ ```
54
+
55
+
56
+
57
+ さらに icap->setProperty は:
58
+
59
+
60
+
61
+ ```C++
62
+
63
+ bool VideoCapture_DShow::setProperty(int propIdx, double propVal)
64
+
65
+ {
66
+
67
+ // image capture properties
68
+
69
+ bool handled = false;
70
+
71
+ switch (propIdx)
72
+
73
+ {
74
+
75
+ case CV_CAP_PROP_FRAME_WIDTH:
76
+
77
+ m_width = cvRound(propVal); // ← 幅をセットしてる現場を目撃!
78
+
79
+ handled = true;
80
+
81
+ break;
82
+
83
+
84
+
85
+ case CV_CAP_PROP_FRAME_HEIGHT:
86
+
87
+ m_height = cvRound(propVal);
88
+
89
+ ...
90
+
91
+ ```

1

加筆

2018/02/10 14:43

投稿

episteme
episteme

スコア16614

test CHANGED
@@ -1 +1,27 @@
1
1
  何度も書いてんだけど、VideoCapture にウィンドウ・サイズを設定する機能なんかありません。VideoCapture::set で設定するのはキャプチャするframeの大きさ。
2
+
3
+
4
+
5
+ > cv::CAP_PROP_FRAME_HEIGHTの高さを設定して定数がコンパイル?あるいは別の何かに置き換えられて出力ウィンドウのサイズが変えられ理由であり原理が全くわかりません。
6
+
7
+
8
+
9
+ VideoCaputureの隠し関数 set_width(int w) /* frame幅を w にセットする */ があったとして、
10
+
11
+
12
+
13
+ ```
14
+
15
+ VideoCapture::set(int command, int val) {
16
+
17
+ if ( command == CAP_PROP_FRAME_WIDTH ) { set_width(val); }
18
+
19
+ ...
20
+
21
+ }
22
+
23
+ ```
24
+
25
+
26
+
27
+ って書かれてるとしたら、納得する?