13

Linux(ubuntu 12.04)でpython経由でopenCVを使用しています。画像を取得したいlogitech c920があります。Cheese は非常に高い解像度までフレームを取得できますが、openCV を使用しようとすると、640x480 の画像しか取得できません。私が試してみました:

import cv
cam = cv.CaptureFromCAM(-1)
cv.SetCaptureProperty(cam,cv.CV_CAP_PROP_FRAME_WIDTH,1920)
cv.SetCaptureProperty(cam,cv.CV_CAP_PROP_FRAME_WIDTH,1080)

しかし、これは最後の2行のそれぞれの後に「0」の出力を生成し、その後次の方法でフレームを取得すると:

image = cv.QueryFrame(cam)

結果の画像はまだ 640x480 です。

関連するツールと思われるものを(Pythonの外部で)インストールしようとしました:

sudo apt-get install libv4l-dev v4l-utils qv4l2 v4l2ucp

実際、次の方法でカメラの設定を操作できるようです (これも Python の外部で)。

v4l2-ctl --set-fmt-video=width=1920,height=1080,pixelformat=1
v4l2-ctl --set-parm=30

そして、次のことを観察します。

v4l2-ctl -V

実際、何かが変更されたことを示唆しています:

Format Video Capture:
    Width/Height   : 1920/1080
    Pixel Format   : 'H264'
    Field          : None
    Bytes per Line : 3840
    Size Image     : 4147200
    Colorspace     : sRGB

しかし、Python シェルにポップすると、上記のコードは以前とまったく同じように動作します (プロパティを設定しようとするとゼロが出力され、640x480 の画像が取得されます)。

キャプチャの解像度を上げることができることは、私にとって非常にミッションクリティカルであるため、誰かが提供できるポインタがあれば大歓迎です.

4

5 に答える 5

3

私はあなたと同じ問題を抱えていました。OpenCVソースに入り、245〜246modules/highgui/src/cap_v4l.cpp行目のデフォルトパラメータを変更して、プロジェクトを再構築しました。

#define DEFAULT_V4L_WIDTH  1920
#define DEFAULT_V4L_HEIGHT 1080

これはOpenCV 2.4.8用です

于 2014-03-10T16:04:27.887 に答える
3

ドキュメントから、

関数 cvSetCaptureProperty は、ビデオ キャプチャの指定されたプロパティを設定します。現在、関数はビデオ ファイルのみをサポートしています: CV_CAP_PROP_POS_MSEC、CV_CAP_PROP_POS_FRAMES、CV_CAP_PROP_POS_AVI_RATIO 。

注: FFMPEG を使用する Linux で最新の CVS ダウンロードを使用する場合、この関数は現在何も実行しません (0 を使用して返すと、関数の内容は非表示になります)。

于 2012-07-26T08:25:32.847 に答える
2

cammeraによって変動するようです。

AFIK、Logitechカメラは特に悪いLinuxサポートを持っています(それは良くなりましたが)彼らの問題のほとんどはフォーカスコントロールのような高度な機能にあります。安全にプレイするために、基本的なカメラ(IEマニュアルフォーカスのLogitechカメラ)を使用することをお勧めします。

私の内蔵ラップトップカメラには問題はなく、通常の解像度で表示されます。
私の外部ロジクールプロは、初期化に問題があります。

ただし、これら2つの行で解決の問題を克服できます。

はい、使用したものと同じです。

cv.SetCaptureProperty(self.capture,cv.CV_CAP_PROP_FRAME_WIDTH, 1280)
cv.SetCaptureProperty(self.capture,cv.CV_CAP_PROP_FRAME_HEIGHT, 720)

私のLogitechはまだエラーをスローしますが、解決策は問題ありません。

設定した解像度がカメラでサポートされていることを確認してください。サポートされていない場合、v4lが怒鳴ります。サポートされていないネイティブ解像度を設定すると、成功しません。

于 2012-11-24T02:19:14.753 に答える
1

機能するかどうかはわかりませんが、カメラ オブジェクトをインスタンス化した後、パラメータを値に強制することができます。

import cv
cam = cv.CaptureFromCAM(-1)

os.system("v4l2-ctl --set-fmt-video=width=1920,height=1080,pixelformat=1") 
os.system("v4l2-ctl --set-parm=30")

image = cv.QueryFrame(cam)

これはちょっとハックなので、クラッシュすることを期待してください。

于 2012-07-17T12:51:41.753 に答える
1
## Sets up the camera to capture video
cap = cv2.VideoCapture(device)

width = 1280
height = 720

#set the width and height
cap.set(3,width)
cap.set(4,height)
于 2013-12-19T13:32:48.363 に答える