我在WinXP笔记本电脑上运行Python2.7.1和OpenCV 2.2,没有问题,并编写了一个跟踪程序,没有故障。但是由于一些奇怪的原因,我无法在我试图安装OpenCV和Python的任何其他计算机上运行相同的程序(使用相同的二进制文件或适当的64位二进制文件)。在这些计算机OpenCV似乎是正确安装(虽然我只测试和CaptureFromCamera()在笔记本电脑的网络摄像头),但CaptureFromFile()返回'None'并给出"错误:数组应该是CvMat或IplImage"在QueryFrame之后,例如。
这个简单的代码:
import CV/
videofile = cv.CaptureFromFile(' .avi')/
frame = cvv . queryframe (videofile)/
打印类型(视频文件)/
打印类型(帧)
的回报:
类型的简历。捕获的/
类型"NoneType"
- OpenCV和Python在windows PATH…
- 我已经将OpenCV站点包内容来回移动到python27 Lib site-packages文件夹中。
- 我尝试了不同的avi文件(以防它是一些CODEC问题)。这个AVI使用MJPEG编码(GSpot报告ffdshow Video Decoder用于读取)。
- 图像工作良好(我认为):简单的转换代码:im = cv.LoadImageM("c:testscolormap3.tif")cv.SaveImage("c: colormap3-out.png测试",im)打开,转换并保存新图像…
- 我已经测试了不同文件夹中的AVI文件,使用"c:","c:/","c:"one_answers"c://"。
我迷路了…有人知道是什么愚蠢的错误导致了这种情况吗?由于
这可能听起来很愚蠢,但我只是在相同的代码片段(Python 2.7.1, Win 7, OpenCV 2.2.0)中遇到了相同的症状。我从
更改了文件路径capture = cv.CaptureFromFile('C:Misctree.avi')
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,使用以下指导:
http://opencv.willowgarage.com/wiki/FFMPEG
http://ubuntuforums.org/showthread.php?t=786095
希望对你有帮助。
这一定是默认编解码器的问题。OpenCV使用暴力方法打开视频文件或从相机捕获。它通过尝试和错误,通过所有的源/编解码器/api,它可以找到一些合理的顺序。(至少有1.1人这样做了)。这意味着在n个不同的系统(或天)上,您可能有n种不同的方式访问同一视频。例如,多个网络摄像头的顺序也是不确定的,可能取决于插入顺序或蝴蝶。
找出你的笔记本电脑使用的是什么,(重新)在所有系统上安装,然后重试。此外,在c版本中,您可以查看捕获的属性寻找cvGetCaptureProperty和cvSetCaptureProperty,您可能能够提示格式。
[编辑]只要在文档中查找一下,这些函数在Python中也可用。看一下,应该有帮助。