IplImage';无';CaptureFromFile()上出错-Python 2.7.1和OpenCV 2.2 WinXP

IplImage';无';CaptureFromFile()上出错-Python 2.7.1和OpenCV 2.2 WinXP,opencv,python-2.7,iplimage,Opencv,Python 2.7,Iplimage,我在WinXP笔记本电脑上运行Python2.7.1和OpenCV 2.2,没有任何问题,并且编写了一个跟踪程序,该程序运行正常,没有任何故障。但是由于某种奇怪的原因,我无法在我尝试安装OpenCV和Python的任何其他计算机上运行相同的程序(使用相同的二进制文件或适当的64位二进制文件)。在这些计算机中,OpenCV似乎安装正确(尽管我只在笔记本电脑的网络摄像头中测试了CaptureFromCamera()),但CaptureFromFile()返回“无”,并在查询框后给出“错误:数组应为C

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

这个简单的代码:

导入cv/
videofile=cv.CaptureFromFile('a.avi')/
frame=cv.QueryFrame(视频文件)/
打印类型(视频文件)/
打印类型(框架)

返回:

键入“简历捕获”/
类型“非类型”

  • OpenCV和Python位于windows路径中
  • 我已将OpenCV站点包内容前后移动到Pyhton27 Lib\site packages文件夹
  • 我尝试了不同的avi文件(以防编解码器出现问题)。该AVI使用MJPEG编码(GSpot报告ffdshow视频解码器用于读取)
  • 图像工作正常(我认为):简单的转换代码: im=cv.LoadImageM(“c:\tests\colormap3.tif”) cv.SaveImage(“c:\tests\colormap3 out.png”,im) 打开、转换和保存新图像
  • 我使用不同文件夹中的AVI文件进行了测试,使用了“c:\”、“c:/”、“c:\”和“c:/”

我在这里迷路了。。。有人知道这是什么愚蠢的错误吗?谢谢

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

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

[编辑]
只需查看文档,这些函数在Python中也可用。看一看,它应该会有帮助。

这听起来可能很愚蠢,但我只是在相同的代码片段(Python 2.7.1、Win 7、OpenCV 2.2.0)中遇到了同样的问题,出现了同样的症状。我从更改了文件路径

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

<type 'cv.Capture'>
<type 'cv.iplimage'>

我遇到了这个问题,下面是我如何解决它的。我查看了OpenCV的
cmake
命令的输出,它有以下行:

...
--     FFMPEG:                     NO
...
为了解决此问题,您可能只需安装以下库即可:

sudo apt-get install libavformat-dev libavcodec-dev libavfilter-dev libswscale-dev
重新运行的
cmake
现在有望显示:

...
--     FFMPEG:                     YES
...
重新编译OpenCV,重新安装,希望您现在可以阅读视频。如果仍然存在问题,可以尝试使用
--enable shared
选项编译ffmpeg,并将以下内容作为指南:



希望这能有所帮助。

AndreasT:谢谢你的提示(我也怀疑这是ffdshow在某个地方不兼容);但是,CaptureProperties函数无法工作,因为捕获未初始化(对象已实例化,但仍为空)。。。但是文件本身的编码没有问题,因为没有任何文件可以工作——甚至OpenCV示例的默认“tree.avi”文件也不行。伊利亚:谢谢你的建议,但这不是问题所在。我知道有时从/到\甚至到\\或//的更改可以解决路径问题,我尝试了所有这些方法。这显然是一个编解码器的问题:如果我把视频转换成原始的YUV,程序就会工作。
...
--     FFMPEG:                     YES
...