4

今日、opencv を simplecv python インターフェイスでラップしました。公式のSimpleCV クックブックを読んだ後、画像の読み込み、保存、および操作を正常に行うことができました。したがって、ライブラリが適切にロードされていることがわかります。

ただし、[カメラ、Kinect、または仮想カメラの使用] という見出しの下で、いくつかのコマンドを実行できませんでした。特に、mycam = Camera()機能しましたがimg = mycam.getImage()、次のエラーが発生しました。

In [35]: img = mycam.getImage().save()
OpenCV Error: Bad argument (Array should be CvMat or IplImage) in cvGetSize, file /home/jordan/OpenCV-2.2.0/modules/core/src/array.cpp, line 1237
---------------------------------------------------------------------------
error                                     Traceback (most recent call last)

/home/simplecv/<ipython console> in <module>()

/usr/local/lib/python2.7/dist-packages/SimpleCV-1.1-py2.7.egg/SimpleCV/Camera.pyc in getImage(self)
    332 
    333         frame = cv.RetrieveFrame(self.capture)
--> 334         newimg = cv.CreateImage(cv.GetSize(frame), cv.IPL_DEPTH_8U, 3)
    335         cv.Copy(frame, newimg)
    336         return Image(newimg, self)

error: Array should be CvMat or IplImage

HP TX2500 タブレットで Ubuntu Natty を実行しています。ウェブカメラが組み込まれています (Cyber​​Link Youcam?) 誰かこのエラーを見たことがありますか? 私は今日、解決策を探してウェブ全体を調べましたが、何もうまくいかないようです.

更新 1 : cv.QueryFrame(capture) を別のスタック オーバーフローの質問でここにあるコードを使用してテストしたところ、機能しました。だから私はこれをウェブカメラの問題にほぼ釘付けにしました.

更新 2 : 実際、Web カメラがないマシンでもまったく同じエラーが発生します。TX2500には対応していないようです...

4

5 に答える 5

1

SimpleCV の Camera.py からエラーが発生したため、getImage() メソッドをデバッグする必要があります。編集できる場合:

def getImage(self):
    if (not self.threaded):
        cv.GrabFrame(self.capture)

    frame = cv.RetrieveFrame(self.capture)
    import pdb       # <-- add this line
    pdb.set_trace()  # <-- add this line
    newimg = cv.CreateImage(cv.GetSize(frame), cv.IPL_DEPTH_8U, 3)
    cv.Copy(frame, newimg)
    return Image(newimg, self)

次に、プログラムを実行すると、pdb.set_trace() として一時停止されます。ここで、フレームのタイプを調べて、フレームのサイズを取得する方法を見つけようとします。

または、コードでキャプチャを実行して、フレーム オブジェクトを検査することもできます。

mycam = Camera()
cv.GrabFrame(mycam.capture)
frame = cv.RetrieveFrame(mycam.capture)
于 2011-08-09T03:15:05.383 に答える
0

OpenCVでカメラを取得しています

from opencv import cv
from opencv import highgui
from opencv import adaptors

def get_image()
    cam = highgui.cvCreateCameraCapture(0)
    im = highgui.cvQueryFrame(cam)
    # Add the line below if you need it (Ubuntu 8.04+)
    #im = opencv.cvGetMat(im)
    return im
于 2011-08-09T23:13:34.107 に答える
0

私自身の質問に答えるために...

今日 Logitech C210 を購入したところ、問題は解消されました。私は今警告を受けています:

Corrupt JPEG data: X extraneous bytes before marker 0xYY.

ただし、 経由でビデオ ストリームを Web ブラウザに正常にプッシュできJpegStreamer()ます。このエラーを解決できない場合は、新しいスレッドを開きます。

したがって、今のところ、TX2500 のせいにします。将来誰かが修正を見つけた場合は、投稿してください。

調査のために@HYRYに​​小道具。ありがとう。

于 2011-08-09T20:42:56.133 に答える
0

また、私が気付いていなかったことに言及する必要がありますが、2.3未満のOpenCVはUbuntu 11.04以降のWebカメラで壊れているということです。以前にUbuntu 10.10を実行していたので、これに気づきませんでした。出力を見ると、Python 2.7を使用しているため、Ubuntu 11.04以降を使用していると思われます。とにかく、この問題の修正があります。これはマスターにプッシュされ、基本的に OpenCV が機能しているかどうかを確認し、そうでない場合は pygame にフォールバックします。

この修正は、SimpleCV の 1.2 リリースにも含まれます (現在は master ブランチにあります)。

于 2011-10-18T15:31:28.813 に答える
0

Anthony は、SimpleCV 開発者の 1 人です。

また、image.save() を使用する代わりに、この関数はファイル/ビデオをディスクに書き込みます。代わりに image.show() を使用することをお勧めします。必要に応じて保存できますが、 image.save("/tmp/blah.png") のようなファイル パスを指定する必要があります。

だからあなたがしたい:

img = mycam.getImage()
img.show()

そのカメラのモデルについては、動作するかどうかわかりません。OpenCV だけでなく、さまざまなカメラ クラスもラッパーしていることに注意してください。これは、OpenCV が 640x480 を超える Web カメラに問題があるためです。現在、高解像度のカメラを使用できます。

于 2011-10-10T19:02:28.727 に答える