2012-01-09 12 views
4

opencvでリアルタイムの平面オブジェクトトラッキングを試みているうちに、pyopencvの「オブジェクトを見つける」デモが出ました。このスクリプトは、スタティックイメージをウェブカメラから取得した現在のフレームと比較しようとしているのに対して、あるスタティックイメージを別のスタティックイメージと比較するという例外を除いて、私が望むことを行います。この目的を達成するために、私はこの行これは、それが必要としてではなく動作します。このopencvでwhile-loopエラーが発生する

capture = cv.VideoCapture(0) 
frame = Mat() 
capture >> frame 
imwrite("box_in_scene.png",frame) 

scene_filename = "box_in_scene.png" 

私はそれが継続的にこれを行うにするために、単純なループを追加しようとすると、それは1サイクルを通過し置き換えその後停止します。スクリプトを終了すると、次のエラーが表示されます。

OpenCV Error: Bad flag (parameter or structure field) (Unrecognized or unsupport 
ed array type) in cvGetMat, file M:\programming\packages\opencv\workspace\2.1\Op 
enCV-2.1.0\src\cxcore\cxarray.cpp, line 2476 
Traceback (most recent call last): 
    File "find_obj.py", line 114, in <module> 
    imageDescriptors = surf(image, mask, imageKeypoints) 
RuntimeError: M:\programming\packages\opencv\workspace\2.1\OpenCV-2.1.0\src\cxco 
re\cxarray.cpp:2476: error: (-206) Unrecognized or unsupported array type in fun 
ction cvGetMat 

誰でも手掛かりがあります。

私が使用しているループが

myloop = 1 
while myloop == 1 : 

このlinkはそれの全体のコードです。

+2

whileループを質問に追加してください。ちょうど何が変わったのかを見るために –

+0

フレームをキャプチャしてそれをループさせるループのコードの先頭を投稿することができます – SB26

+0

あなたの例は全く理解できません。ループの前に関連するコードと関連するコードを書き換え、ループ全体を追加してください。 – Sam

答えて

0

あなたのコードを見てすぐにいくつか気になることがあります。まず、新しいMat()と2つの新しいnamedWindowオブジェクトを宣言しています。これは数千回のループの後でメモリエラーを引き起こす可能性がありますが(コンピュータとOSによって異なります)、主な問題ではない可能性があります。しかし、それは物事を行う恐ろしいやり方であり、やむを得ない習慣です。

私の2番目の問題は、ビデオカメラから画像をスキャンしてファイルに保存し、ファイルをメモリに再ロードして画像を使用できるようにすることです。私は、カメラからメモリに画像のコピーを保存したいと思っていますが、すでにメモリに保存しているので、なぜそれをリロードするのですか? VC++ 10のライブラリはimwriteとimreadに関するいくつかの問題があることが知られているので、あなたがウィンドウ上にいる場合は、これがあなたの悪いマトリックスのソースになる可能性があります。 [編集]あなたがPythonを使っていることは知っていますが、あなたのプログラムは.cppファイルからのエラーを報告しています。つまり、Pythonのインポートは実際にどこかのC++ライブラリにリンクされています[/ EDIT]

imwriteとimreadループ内の呼び出し、カメラから直接画像を使用することができます。この後にコードが動作する場合は、問題がどこにあるかを知ることができます。それがどうなるか教えてください。

関連する問題