これは、「C++: OpenCV2.3.1(!) webcam パラメータへのアクセス」という適切な名前の最後の質問の直接のフォローアップであり、代わりに OpenCV2.4.11 をインストールするように言われました (OpenCV3.0 は機能しませんでした)。 ...私がやった。はい、私の問題は実際には消えていないので、このテキストのほとんどは最後のスレッドの正確なコピー&ペーストです...
ここでも、他のフォーラム (Google、OpenCV など) で検索し、videoInput ライブラリのコード、さまざまなヘッダー ファイル、特に OpenCV の highgui_c.h を調べましたが、これに対する答えを見つけることができないようです。簡単な質問:
OpenCV2.1.0 で変更できたのと同じ方法で、OpenCV2.4.11 を使用して Logitech C310 Web カメラの露出とゲイン (または、一般的には、任意の Web カメラ プロパティ) を変更するにはどうすればよいですか? (Win7 64 ビット、Visual Studio 10 を使用)
編集:これは解決されました。方法はわかりませんが、今朝コードをテストしたところ、VideoCapture と set/get メソッドを使用して露出を報告および設定できました。
videoInput の [Set/Get]VideoSetting[Camera/Filter] 関数に似た、素晴らしく簡単な VideoCapture の get および set メソッドがあります。OpenCV2.4.11 で動作しない私の短い例を次に示します。
編集:今はうまくいきます。私が理解していないのは、いくつかのプロパティの値が-8.58993E+008 (つまり、色相、モノクロ、ガンマ、温度、ズーム、フォーカス、パン、チルト、ロール、アイリス) とそのプロパティ 6 (fourcc)として報告されていることです。 -4.66163E+008です。私の Web カメラにはこれらの機能がないことはわかっていますが、他のすべての未実装の機能は -1 と報告されます。
int __stdcall WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, char* CmdArgs, int CmdShow) {
int device0 = 0;
VideoCapture VC(device0);
if(!VC.isOpened()) // check if we succeeded
return -1;
ostringstream oss;
double CamProp;
for(int i=-4; i<27; i++) {
CamProp = VC.get(i);
Sleep(5);
oss << "Item " << i << ": " << CamProp << "\n";
}
MessageBox(NULL, oss.str().c_str(), "Webcam Values", MB_OK);
return 0;
}
コンパイルし、実行し、ウェブカメラに問題なくアクセスします(コードに追加すると、imshowで画像も表示されます)が、次のような素敵なウィンドウを開くだけです:
アイテム-4:0
アイテム-3:0
アイテム-2 : 0
...
アイテム 2: 0
アイテム 3: 640
アイテム 4: 480
アイテム 5: 0
...
アイテム 25: 0
アイテム 26: 0
編集:上記を参照してください。これは現在機能しています。露出、ゲイン、シャープネス、明るさ、コントラストなど、サポートされているすべてのパラメーターの値を取得します。おそらく、私はまだ 2.3.1 ライブラリなどにリンクしていたのでしょう。
要点: これはすべて、このカメラで OpenCV 2.1.0 を使用して videoInput を使用して完全に設定可能でした。Logitech の機能 (RightLight、Auto Exposure、Auto Whitebalance) を使用する代わりに、独自の照明を行うアプリケーションを実行していました。現在、パラメーターの設定と取得はかなり長い間 OpenCV highgui に統合されていますが、機能リストが大幅に削減されています (パラメーター範囲の要求なし、最小/最大/ステップ幅...、自動露出の設定なし、RightLight など)。何らかの理由で、Logitech Webcam と互換性がありません。解決策を報告できますが、他には何もありません。
編集: videoInput の Min、Max、Step、Auto/Manual 機能がまだありません。値を設定できますが、許可されているかどうかわかりません。
videoInput コードはファイル cap_dshow.cpp の OpenCV のコードにマージされましたが、videoInput クラスを宣言するヘッダー ファイルが見つからず、単に古いコードを使用しても機能しません。だから私は必要なすべての機能を含み、しばらく前に仕事をしたことがわかっているcppファイルを持っていますが、今はアクセスできません。それを行う方法の手がかりはありますか?videoInput/DirectShow インターフェイスを使用して OpenCV2.4.11 のカメラ パラメータにアクセスして変更した人はいますか?
編集: 2.3.1 とは異なり、これは実際に機能するようになったようです。videoInput との直接のやり取りは必要ないようです。ただし、前述の理由から、あると便利です。
たとえば、を使用するという面白い問題もあります
VideoCapture cam(0)
とまったく同じカメラに対応します。
VideoCapture cam(1)
また
VideoCapture cam(any integer value)
これは私には奇妙に思え、同じ方向にほのめかしています-CVのVideoCaptureが私にとって適切に機能しないこと。同様の問題がここで説明されていますが、キャプチャを開いた後、Sleep(1000) でコードを試しましたが、成功しませんでした。
編集:これも現在正しく機能しています。(0) でウェブカメラを取得し、(1) でエラーが表示されますが、これはまったく問題ありません。