我似乎无法使用OpenCV从文件中捕获帧 - 我已根据以下所有必要的先决条件从Ubuntu上的源代码编译:http://opencv.willowgarage.com/wiki/InstallGuide%20%3A%20Debian
#!/usr/bin/env python
import cv
import sys
files = sys.argv[1:]
for f in files:
capture = cv.CaptureFromFile(f)
print capture
print cv.GetCaptureProperty(capture, cv.CV_CAP_PROP_FRAME_WIDTH)
print cv.GetCaptureProperty(capture, cv.CV_CAP_PROP_FRAME_HEIGHT)
for i in xrange(10000):
frame = cv.QueryFrame(capture)
if frame:
print frame
输出:
ubuntu@local:~/opencv$ ./test.py bbb.avi
<Capture 0xa37b130>
0.0
0.0
帧总是无......
我使用以下代码将视频文件转码为i420格式:
mencoder $1 -nosound -ovc raw -vf format=i420 -o $2
有什么想法吗?
答案 0 :(得分:5)
您没有安装gstreamer-ffmpeg
或gsteamer-python
或gsteamer-python-devel
个软件包。我安装了所有这三个。并解决了完全相同的问题。
答案 1 :(得分:4)
我正在使用OpenCV 2.2.0,在源代码的Ubuntu上编译。我可以确认您提供的源代码按预期工作。所以问题出在其他地方。
我无法使用mencoder重现您的问题(在我的机器上安装它有点问题)因此我使用ffmpeg
将原始视频包装在AVI容器中:
ffmpeg -s cif -i ~/local/sample-video/foreman.yuv -vcodec copy foreman.avi
(foreman.yuv是您可以在网上找到的标准CIF图像序列look around)。
从ffmpeg
通过您的来源运行AVI会产生以下结果:
misha@misha-desktop:~/Desktop/stackoverflow$ python ocv_video.py foreman.avi
<Capture 0xa71120>
352.0
288.0
<iplimage(nChannels=3 width=352 height=288 widthStep=1056 )>
<iplimage(nChannels=3 width=352 height=288 widthStep=1056 )>
...
所以事情按预期工作。你应该检查什么:
ffmpeg
库来读取视频文件,因此请留意信息性消息。如果您尝试播放没有容器的RAW视频文件(听起来与您的问题类似)会发生什么:错误:
misha@misha-desktop:~/Desktop/stackoverflow$ python ocv_video.py foreman.yuv
[IMGUTILS @ 0x7fff37c8d040] Picture size 0x0 is invalid
[IMGUTILS @ 0x7fff37c8cf20] Picture size 0x0 is invalid
[rawvideo @ 0x19e65c0] Could not find codec parameters (Video: rawvideo, yuv420p)
[rawvideo @ 0x19e65c0] Estimating duration from bitrate, this may be inaccurate
GStreamer Plugin: Embedded video playback halted; module decodebin20 reported: Your GStreamer installation is missing a plug-in.
<Capture 0x19e3130>
0.0
0.0
ffplay file.avi
- 如果失败,则问题可能出在文件中。尝试使用ffmpeg
转码代替mencoder
。ffmpeg
安装可能会被破坏。