2012-07-10 8 views
46

Thorlabs(DC1545M)のUSBカメラでOpenCV(2.4)とPython(2.7.3)を使用しています。OpenCV/Pythonでのカメラパラメータの設定

私は、ビデオストリーム上のいくつかの画像解析をやっていると私は私のビデオストリームからカメラパラメータの一部を変更できるようにしたいと思います。混乱させることは、私がカメラのプロパティの一部を変更することができますが、それらのすべてを変更することができず、私が間違っていることがわかりません。ここ

PythonでCV2バインディングを使用して、コードであり、私はそれが動作することを確認することができる:コマンドが参照)参考

import cv2 


#capture from camera at location 0 
cap = cv2.VideoCapture(0) 
#set the width and height, and UNSUCCESSFULLY set the exposure time 
cap.set(3,1280) 
cap.set(4,1024) 
cap.set(15, 0.1) 

while True: 
    ret, img = cap.read() 
    cv2.imshow("input", img) 
    #cv2.imshow("thresholded", imgray*thresh2) 

    key = cv2.waitKey(10) 
    if key == 27: 
     break 


cv2.destroyAllWindows() 
cv2.VideoCapture(0).release() 

cap.setの最初の引数(以下に示すカメラのプロパティの列挙、:

0. CV_CAP_PROP_POS_MSEC Current position of the video file in milliseconds. 
1. CV_CAP_PROP_POS_FRAMES 0-based index of the frame to be decoded/captured next. 
3. CV_CAP_PROP_POS_AVI_RATIO Relative position of the video file 
4. CV_CAP_PROP_FRAME_WIDTH Width of the frames in the video stream. 
5. CV_CAP_PROP_FRAME_HEIGHT Height of the frames in the video stream. 
6. CV_CAP_PROP_FPS Frame rate. 
7. CV_CAP_PROP_FOURCC 4-character code of codec. 
8. CV_CAP_PROP_FRAME_COUNT Number of frames in the video file. 
9. CV_CAP_PROP_FORMAT Format of the Mat objects returned by retrieve() . 
10. CV_CAP_PROP_MODE Backend-specific value indicating the current capture mode. 
11. CV_CAP_PROP_BRIGHTNESS Brightness of the image (only for cameras). 
12. CV_CAP_PROP_CONTRAST Contrast of the image (only for cameras). 
13. CV_CAP_PROP_SATURATION Saturation of the image (only for cameras). 
14. CV_CAP_PROP_HUE Hue of the image (only for cameras). 
15. CV_CAP_PROP_GAIN Gain of the image (only for cameras). 
16. CV_CAP_PROP_EXPOSURE Exposure (only for cameras). 
17. CV_CAP_PROP_CONVERT_RGB Boolean flags indicating whether images should be converted to RGB. 
18. CV_CAP_PROP_WHITE_BALANCE Currently unsupported 
19. CV_CAP_PROP_RECTIFICATION Rectification flag for stereo cameras (note: only supported by DC1394 v 2.x backend currently) 

私の質問は以下のとおりです。

python/opencvでカメラ露出時間(または他のカメラパラメータ)を設定することはできますか?

ない場合は、どのように私はこれらのパラメータの設定については行くだろうか?

注:カメラメーカーが提供するC++コードは、これを行う方法を示していますが、私はC++の熟練者ではなく、Pythonベースのソリューションに感謝します。

ありがとうございます!

+2

したがって、15番目のオプションは何ですか、つまりCV_CAP_PROP_EXPOSUREですか?それは暴露時間ですか? –

+3

です。私が作ったのは、それを修正しようとすると、測定可能な結果が出るということです。 (これは 'cap.set(15、x)'で、 'x'の値は測定可能な変化をもたらさない)。 ところで、あなたのブログにありがとう。 Pythonを使ってopencvを高速化することは、私にとって非常に便利でした。 – Mike

+0

最後の行:cv2.VideoCapture(0).release()は単にcap.release()になることができます: – otterb

答えて

29

ないすべてのパラメータは、すべてのカメラでサポートされている - 実際に、彼らは、OpenCVのライブラリの中で最も厄介な部分の一つです。アンドロイドカメラからusbカメラ、プロフェッショナルカメラまでの各カメラタイプは、そのパラメータを設定するための異なるインターフェースを提供します。 OpenCVコードには多くのブランチがありますが、それらの多くをサポートする可能性はありますが、すべての可能性がカバーされているわけではありません。あなたは何ができるか

は、お使いのカメラドライバを調査OpenCVのにパッチを作成し、code.opencv.orgにそれを送信することです。このようにして、他の人はあなたの仕事を楽しむでしょう。

カメラがあなたの要求をサポートしていない可能性もあります。ほとんどのUSBカメラは安価でシンプルです。おそらく、そのパラメータは変更に利用できないかもしれません。

カメラが特定のパラメータをサポートしているとします(カメラメーカーがコードを提供しているとします)、OpenCVを混乱させたくない場合は、そのサンプルコードをboost :: pythonでC++でラップしてPythonで利用可能です。その後、それを楽しんでください。

+2

は、MacのLinuxウィンドウでopencvに対応しているカメラの一覧です。将来的に私はソフトウェアから始まり、購入前にハードウェアに戻って作業を開始するように思えます。カメラのドライバを書くことは良い目標ですが、私はそれをすることを学ぶことができますしばらくするでしょう。 – user391339

+0

@サミー私はこれを行う方法について質問を投稿しました。あなたはここで詳しく説明しますか?http://stackoverflow.com/questions/27914780/why-does-the-frame-width-height-not-always-get-set-using-opencv – evan54

14

私はこれがあなたの問題を解決することができるかどうかわからない...ラズベリーパイにOpenCVのと同じ問題を抱えていたが、何私のために働いたことは、あなたが使用する必要があり、時間が異なる可能性が

import time 
import cv2 


cap = cv2.VideoCapture(0) 

cap.set(3,1280) 

cap.set(4,1024) 

time.sleep(2) 

cap.set(15, -8.0) 

ました

+0

すごい、あなたのコードは私のロジクールを作ったopencvで私のMacBookでc615 webcamを動かす! 「うまくいく!」私はこれを数日間試していた。私はかなりHDではないと私は焦点のパラメータを変更することができますが、本当に良いスタートだとは思わない。 – user391339

+0

私は決して専門家ではなく、3、4、15は私にとって魔法の数字です。それは例えばCV_CAP_PROP_FRAME_WIDTH? –

+3

cap.set(15、-8.0)はどういう意味ですか?私は自分のロジクールウェブカメラで露出時間を設定しようとしています。 – user391339

20

VideoCaptureのプロパティを識別するために整数値を使用しないようにするには、OpenCV 2.4ではcv2.cv.CV_CAP_PROP_FPS、ではたとえばcv2.cv.CV_CAP_PROP_FPSを使用します。 (また、下記のステファンさんのコメントを参照してください。)

をここでのOpenCV 2.4と3の両方のために働くの効用関数を。0:

# returns OpenCV VideoCapture property id given, e.g., "FPS" 
def capPropId(prop): 
    return getattr(cv2 if OPCV3 else cv2.cv, 
    ("" if OPCV3 else "CV_") + "CAP_PROP_" + prop) 

OPCV3は以前、このような私のユーティリティコードで設定されている:

from pkg_resources import parse_version 
OPCV3 = parse_version(cv2.__version__) >= parse_version('3') 
+1

私はこれらの定数がPythonでどこに定義されているかを調べるのに10分を費やしました - ありがとう! – rescdsk

+2

あなたは正しいです - もしあなたが2.4.9のようなバージョン(2014-04-25 http://opencv.org/からの安定版ダウンロード)を使用するなら、 'cv2.cv.CV_CAP_PROP_XXXX'を使う必要があります。これについてはhttp://code.opencv.org/issues/3181を参照してください。最新のブランチを使用する場合は、 'cv2.CAP_PROP_XXXX'を使用してください。 –

6

私はどちらかの問題OpenCVのを修正することができませんでしたが、video4linux(V4L2)回避策はとに動作します Linuxを使用している場合のOpenCV。少なくとも、それはRasbianと私の安いwebcamと私のラズベリーパイで行います。これはあなたが望むのと同じくらい頑丈で軽くて持ち運びが容易ではありませんが、状況によってはそれにもかかわらず非常に便利です。

v4l2-ctlアプリケーションがインストールされていることを確認してください。 Debian v4l-utilsパッケージから入手できます。この中で(

v4l2-ctl -d /dev/video1 -c exposure_auto=1 -c exposure_auto_priority=0 -c exposure_absolute=10 

それはマニュアル設定にカメラのシャッター時間を上書きし、(ミリ秒?)シャッター時間を変更する最後のパラメータで:実行よりコマンド(または内からPythonアプリケーションを実行する前に)例)10.この値が小さいほど、画像が暗くなります。

+0

これはUbuntu 14.04を実行している私のToshiba Intelベースのラップトップで動作しました。私はv4l2-ctlを使用して、フレームレートを含め、私が望むオプションを設定しました。私はOpenCVでこれらの設定を試みましたが、上記と同じエラーがありました。 –

0

誰もがまだCV_CAP_PROP_EXPOSUREの値が何であるか疑問に思っている場合:

依存します。私の安いウェブカメラのために、私は希望の値を直接入力する必要があります。 1/10sに対して0.1。高価な産業用カメラでは、2^-5秒= 1/32秒の露出時間を得るために-5を入力しなければなりません。

+0

OpenCVのset関数は整数を扱うことができますか? –

関連する問題