1

我在我的 WinXP 笔记本电脑上运行 Python2.7.1 和 OpenCV 2.2 没有问题,并编写了一个可以正常工作的跟踪程序。但是由于某些奇怪的原因,我无法在尝试安装 OpenCV 和 Python 的任何其他计算机上运行相同的程序(使用相同的二进制文件或适当的 64 位二进制文​​件)。在这些计算机中,OpenCV 似乎已正确安装(尽管我只在笔记本电脑的网络摄像头中测试过 CaptureFromCamera()),但 CaptureFromFile() 返回 'None' 并在 QueryFrame 之后给出“错误:数组应该是 CvMat 或 IplImage” , 例如。

这个简单的代码:

导入 cv /
videofile = cv.CaptureFromFile('a.avi') /
frame = cv.QueryFrame(videofile) /
print type(videofile) /
print type(frame)

返回:

输入“cv.Capture”/
输入“NoneType”

  • OpenCV 和 Python 在 windows PATH 中...
  • 我已将 OpenCV 站点包内容来回移动到 Pyhton27 Lib\Site-packages 文件夹。
  • 我尝试了不同的 avi 文件(以防它是一些 CODEC 问题)。此 AVI 使用 MJPEG 编码(并且 GSpot 报告 ffdshow Video Decoder 用于读取)。
  • 图像工作正常(我认为):简单的转换代码: im = cv.LoadImageM("c:\tests\colormap3.tif") cv.SaveImage("c:\tests\colormap3-out.png", im) 打开,转换并保存新图像...
  • 我已经使用“c:\”、“c:/”、“c:\”和“c://”对不同文件夹中的 AVI 文件进行了测试。

我在这里迷路了......任何人都知道这可能是什么愚蠢和菜鸟的错误?谢谢

4

3 回答 3

1

我遇到了这个问题,这是我解决它的方法。我查看了 OpenCVcmake命令的输出,它有以下行:

...
--     FFMPEG:                     NO
...

为了解决这个问题,您可能只需安装以下库即可摆脱困境:

sudo apt-get install libavformat-dev libavcodec-dev libavfilter-dev libswscale-dev

cmake现在希望重新运行会说:

...
--     FFMPEG:                     YES
...

重新编译 OpenCV,重新安装它,希望您现在可以阅读视频。如果您仍然有问题,您可以尝试使用该--enable-shared选项编译 ffmpeg,使用这些作为指南:

http://opencv.willowgarage.com/wiki/FFMPEG
http://ubuntuforums.org/showthread.php?t=786095

希望有帮助。

于 2011-09-27T16:27:16.653 回答
1

听起来可能很愚蠢,但对于相同的代码片段(Python 2.7.1、Win 7、OpenCV 2.2.0),我只是遇到了相同的问题和相同的症状。我改变了文件路径

capture = cv.CaptureFromFile('C:\Misc\tree.avi')

capture = cv.CaptureFromFile('C:/Misc/tree.avi')

<type 'cv.Capture'>
<type 'cv.iplimage'>
于 2011-06-03T22:03:35.490 回答
0

这一定是默认编解码器的问题。OpenCV 使用蛮力方法打开视频文件或从相机捕获。它通过以某种合理顺序找到的所有源/编解码器/api进行反复试验。(至少 1.1 这样做了)。这意味着在 n 个不同的系统(或几天)上,您可能会以 n 种不同的方式访问同一视频。例如,多个网络摄像头的顺序也是不确定的,可能取决于插入顺序或蝴蝶。

找出您的笔记本电脑使用什么,在所有系统上(重新)安装它并重试。此外,在 c 版本中,您可以查看捕获的属性,查找 cvGetCaptureProperty 和 cvSetCaptureProperty,您可以在其中提示格式。

[编辑] 刚刚在文档中查看了这些函数,这些函数在 Python 中也可用。看看吧,应该有帮助的。

于 2011-05-02T16:51:11.013 回答