4

SimpleCVバージョン1.3スーパーパック(Python 2.7)をインストールし、SimpleCVを使用してPracticalComputerVisionのHelloWordアプリケーションを試してみました。

from SimpleCV import Camera, Display, Image
import time

# Initialize the camera
cam = Camera()

# Initialize the display
display = Display()

# Snap a picture using the camera
img = cam.getImage()

最後の行で失敗します

OpenCV Error: Bad argument (Array should be CvMat or IplImage) in unknown function, file C:\slave\WinInstallerMegaPack\src\opencv\modules\core\src\array.cpp, line 1238

---------------------------------------------------------------------------
error                                     Traceback (most recent call last)
C:\Python27\lib\site-packages\SimpleCV\Shell\Shell.pyc in <module>()
----> 1 img = cam.getImage()

C:\Python27\lib\site-packages\SimpleCV\Camera.pyc in getImage(self)
    584
    585         frame = cv.RetrieveFrame(self.capture)
--> 586         newimg = cv.CreateImage(cv.GetSize(frame), cv.IPL_DEPTH_8U, 3)
    587         cv.Copy(frame, newimg)
    588         return Image(newimg, self)

error: Array should be CvMat or IplImage

Windows7PCのCL-Eyeドライバーを介してPS3Eyeカメラを使用しています。それはusb経由です。それ以外の場合、カメラは正常に動作します。これを修正する方法はありますか?

4

2 に答える 2

1

SimpleCV で問題ありません。カメラに問題があるはずです。OpenCV を再インストールしてみてください。OpenCV の最新バージョン (OpenCV 2.4.2) をインストールします。

カメラが OpenCV で動作するかどうかを確認するには、

import cv2
c = VideoCapture(0)
val, img = c.read()
print val #this should be True
print img #this should not be all 0s
于 2012-09-19T03:45:35.910 に答える
1

cv.CreateImage は画像または配列を必要とします。あなたは配列を返していないと思いますcv.GetSize(frame)(その理由を正確に確認する必要があります)。

あなたも試すかもしれません

 newimg = cv.CreateImage(frame, cv.IPL_DEPTH_8U, 3)

ドキュメントによると、どこframeに IplImage を指定する必要があります。

http://docs.opencv.org/modules/highgui/doc/reading_and_writing_images_and_video.html#videocapture-retrieve

しかしRetrieveFrame、何らかの理由で失敗していないことを確認してください。たとえば、Skype のビデオチャット機能と競合するためにカメラへのアクセスが拒否されたという報告があります。カメラにアクセスする可能性のあるソフトウェアを実行していますか?

Process Explorer をダウンロードして、文字列「DeviceClasses」を含むハンドルを持つプロセスがあるかどうかを確認してください ([検索] > [ハンドルまたは DLL])。

更新:残念ながら、このセクションは PCI カードにのみ適用され、PSEye は USB です{ 必死の対策として、システムの復元でスナップショットを作成し、Windows 7 用の FGeng のユニバーサル ビデオ サポート ドライバーをインストールできます。次に、OpenCV がそれをカメラとして認識するかどうかを確認しますコネクタ。

http://www.fgeng.com/drivers.htm

そうでない場合は、システムの復元で消去できます。カメラを占有すると WDM も占有する可能性があり、成功の可能性はわずかですが、それはわかりません。}

更新:少し調査を行いました。アクセスするアプリケーションによっては、PSEye 用の CL-Eye ドライバーに問題がないわけではないことがわかります。新しいドライバーはいくつかの問題を解決しました (2012 年 2 月のスレッド、おそらく時代遅れです)。カメラのライセンスが問題になる場合があります ( http://nuigroup.com/forums/viewthread/13699/ )。

ドライバーの代わりに CL-Eye SDK を試すこともできます。前者はプラットフォームに OpenCV を明示的にリストしますが、後者はそうしないためです。

SDK を既にインストールしている場合は、システムに別のイメージング周辺機器が登録されている場合に備えて、カメラ番号 (#0、#1) を確認することをお勧めします。

もう 1 つの可能性は、DxDiag ユーティリティを実行して、DirectShow の障害の可能性を診断することです。

ここでの問題は、システムから得られる情報があまりないことです。

"C:\Python27\lib\site-packages\SimpleCV\Camera.py" をバックアップ ファイルにコピーし、print frame585 行目と 586 行目の間に一時的に a を追加するなど、より有益なものに変更することをお勧めします (NB: 行上記とまったく同じようにインデントする必要があります)。

于 2012-09-18T19:00:36.670 に答える