回答編集履歴

1

補足

2018/02/09 18:24

投稿

yumetodo
yumetodo

スコア5852

answer CHANGED
@@ -33,4 +33,25 @@
33
33
 
34
34
  とあります。まあそりゃそうだよなって内容ですね、たとえばVFRな映像に`cv::CAP_PROP_FPS`をidentifierにsetやらgetやらしても意味のある結果はどう考えても産まないですよね。
35
35
 
36
- そんな感じで公式ドキュメント眺めるとええぞ!みたいな話でした。
36
+ そんな感じで公式ドキュメント眺めるとええぞ!みたいな話でした。
37
+
38
+ ---
39
+
40
+ > しかしこの整数の必要性は何なのでしょうか?
41
+
42
+ という疑問が出るだろうと思って
43
+
44
+ > メンバ関数名が`set`だけじゃ何をセットするやらわからんので第1引数はそれを識別するものだ、ということがわかりますね。
45
+
46
+ と書いたんですが不十分だったようなので補足します。まあ別に`set`/`get`っていう関数に**enumを渡して動的ディスパッチ**しなくても、例えば`set_cap_prop_fps()`みたいな関数を作る実装にしても良かったと思うんですが、シンボル名を減らしたかったのか何なのか、とにかくOpenCVの開発者たちはその選択肢を選ばなかったようです。
47
+
48
+ ---
49
+
50
+ > CV_CAP_PROP_FRAME_WIDTHの正体についてはCamera.Handle,"Width", &nTempを引数とする関数PvAttrUint32Getとしてもいいのでしょうか?
51
+
52
+ だめです。落ち着いて上で取り上げた[`VideoCapture::set()`](https://docs.opencv.org/3.4.0/d8/dfe/classcv_1_1VideoCapture.html#aa6480e6972ef4c00d74814ec841a2939)を読んでください。
53
+
54
+ > Reading / writing properties involves many layers. Some unexpected result might happens along this chain.
55
+ `VideoCapture -> API Backend -> Operating System -> Device Driver -> Device Hardware`
56
+
57
+ とあります。いいですか?`API Backend`ですよ?で、ググればわかるのですでにお調べのことと思いますが、PvAttrUint32GetっていうのはPvAPIのものです。他のAPIの場合も当然ありえます。