4

刚刚安装了 SimpleCV 版本 1.3 Superpack (Python 2.7) 并尝试使用 SimpleCV 的实用计算机视觉中的 Hello Word 应用程序

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

我在 Windows 7 PC 上通过 CL-Eye 驱动程序使用 PS3 Eye 相机。那是通过usb。否则相机工作正常。有什么想法可以解决这个问题吗?

4

2 回答 2

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,并检查(查找 > 句柄或 DLL)是否有任何进程的句柄包含字符串“DeviceClasses”。

更新我的错,本节仅适用于 PCI 卡和 PSEye 是 USB { 作为一个绝望的措施,您可以使用系统还原拍摄快照,并安装 FGeng 的适用于 Windows 7 的通用视频支持驱动程序。然后检查 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),以防系统中注册了另一个成像外围设备。

另一种可能性是运行 DxDiag 实用程序来诊断可能的 DirectShow 障碍。

这里的问题是系统没有太多信息。

您可能希望将“C:\Python27\lib\site-packages\SimpleCV\Camera.py”复制到备份文件中,并将其修改为提供更多信息,例如print frame在第 585 行和第 586 行之间临时添加一个(注意:行必须完全按照上面的缩进)。

于 2012-09-18T19:00:36.670 回答
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 回答