98

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

ビデオストリームで画像分析を行っていますが、ビデオストリームからカメラパラメータの一部を変更できるようにしたいと思います。紛らわしいのは、カメラのプロパティの一部を変更できるが、すべてを変更できるわけではなく、何が間違っているのかわからないことです。

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

(コメント投稿者のMarkus Weberが以下で指摘しているように、OpenCV 4では、プロパティ名から「CV」プレフィックスを削除する必要があることに注意してください。例 cv2.CV_CAP_PROP_FRAME_HEIGHT -> cv2.CAP_PROP_FRAME_HEIGHT:)

私の質問は次のとおりです。

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

そうでない場合、これらのパラメータを設定するにはどうすればよいですか?

注:これを行う方法を示すC ++コードがカメラの製造元から提供されていますが、私はC ++の専門家ではなく(長い目で見れば)、Pythonベースのソリューションをいただければ幸いです。

前もって感謝します!

4

5 に答える 5

59

すべてのパラメーターがすべてのカメラでサポートされているわけではありません。実際、これらはOpenCVライブラリの中で最も厄介な部分の1つです。AndroidカメラからUSBカメラ、プロ仕様のカメラまで、カメラの種類ごとに、パラメータを変更するためのさまざまなインターフェイスが用意されています。OpenCVコードには、それらの多くをサポートするための多くのブランチがありますが、もちろん、すべての可能性がカバーされているわけではありません。

できることは、カメラドライバーを調査し、OpenCVのパッチを作成して、code.opencv.orgに送信することです。このようにして、他の人があなたの仕事を楽しむことができます。あなたが他の人を楽しむのと同じです。

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

カメラが特定のパラメーターをサポートしていることが確実で(カメラの製造元がコードを提供していると言う)、OpenCVをいじりたくない場合は、そのサンプルコードをC++でboost:: pythonでラップして、Pythonで使用できるようにすることができます。その後、それを使用してお楽しみください。

于 2012-07-11T13:00:19.810 に答える
29

Raspberry Piの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)

使用しなければならない時間は異なる場合があります

于 2013-01-24T20:57:06.050 に答える
26

プロパティを識別するために整数値を使用することを避けるためVideoCaptureに、たとえば、cv2.cv.CV_CAP_PROP_FPSOpenCV2.4およびOpenCV3.0で使用できますcv2.CAP_PROP_FPS。(以下のStefanのコメントも参照してください。)

ここに、OpenCV2.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')
于 2013-02-08T16:09:21.093 に答える
8

OpenCVの問題も修正できませんでしたが、Linuxを使用している場合はvideo4linux(V4L2)の回避策がOpenCVで機能します。少なくとも、Rasbianを使用したRaspberryPiと安価なWebカメラでは機能します。これは、思ったほど頑丈で軽量で持ち運びに便利ではありませんが、状況によっては非常に便利な場合があります。

たとえば、Debianv4l-utilsパッケージからv4l2-ctlアプリケーションがインストールされていることを確認してください。コマンドを実行するよりも(Pythonアプリケーションを実行する前、または内部から):

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

カメラのシャッター時間を手動設定に上書きし、最後のパラメーターでシャッター時間(ミリ秒単位?)を(この例では)10に変更します。この値を低くすると、画像が暗くなります。

于 2014-08-04T11:58:42.997 に答える
5

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

依存します。安価なWebカメラの場合、目的の値を直接入力する必要があります。たとえば、1/10秒の場合は0.1です。高価な産業用カメラの場合、露出時間を2 ^ -5s = 1/32sにするには、-5を入力する必要があります。

于 2016-05-29T23:12:23.953 に答える