OpenCV(3.3.0)在带视频的VideoCapture上返回失败但与Webcam一起使用[OS X]

时间:2017-09-05 14:35:19

标签: python opencv video ffmpeg capture

感谢您的阅读,我一直在努力让这一天工作,我没有接近解决方案。

我正试图让这个object tracker起作用。当我使用来自我的网络摄像头的视频时(使用:python object-tracker-single.py -d 0,一切都按预期工作。

但是一旦我尝试使用视频文件(我尝试过不同的格式:.mp4.mkv.avi。我也尝试使用该文件在存储库中给出的,也没有用。看看是否有File not found - 错误,我传递了一个无效的路径到函数并且打印出一个错误,当我使用时没有打印其他视频。所以我使用的文件是(/是)有效且没有损坏。

我在this article之后dlib通过homebrew安装了OpenCV并从官方来源编译了CMake。这是# Create the VideoCapture object cam = cv2.VideoCapture(source) # If Camera Device is not opened, exit the program if not cam.isOpened(): print "Video device or file couldn't be opened" exit() print "Press key `p` to pause the video to start tracking" while True: # Retrieve an image and Display it. retval, img = cam.read() #<-- this returns false when trying to read a video if not retval: print "Cannot capture frame device" exit() 吐出的CMakeCache.txt。在我第一次编译之后,我添加了opencv_contrib,认为它可以提供帮助(我也认为我确实需要它),但这并没有解决问题。

这是我遇到问题的代码:

retval

在标记的行中,False等于imageNone等于ffmpeg。 如果我可以以某种方式调试此行为,它本来会帮助我,但我没有找到任何方法这样做。

我发现很多Windows用户都遇到了ffmpeg支持丢失的问题,但对我来说情况并非如此,因为我在之前的(不是与OpenCV相关的)项目{{1}中使用了CMakeCache.txt报告已找到ffmpeg并且编译成功。

我还尝试使用视频文件的完全限定文件名,这会导致Video device or file couldn't be opened或给定问题。

如果你知道如何彻底解决这个问题,想知道如何解决它或者能为我提供一种正确调试这种行为的方法,我会非常高兴来到这里!

谢谢!

-

系统:MacBook Pro(macOS Sierra 10.12.6

OpenCV版本:3.3.0

Dlib版本(不是必须的,但是嘿):19.4.0

编辑2 输出cmake -DOPENCV_EXTRA_MODULES_PATH=../opencv_contrib-master/modules ../ >> result.txtpastebin

2 个答案:

答案 0 :(得分:1)

我在使用OpenCV 3.3.0时遇到了同样的问题。在Ubuntu 14.04上。

cv2.VideoCapture失败的原因,似乎是因为OpenCV安装错误。

应遵循正式的安装方式:http://docs.opencv.org/trunk/d7/d9f/tutorial_linux_install.html

我使用pip安装,显然无法正常工作。

我最终只是拉了一个码头图片: https://hub.docker.com/r/victorhcm/opencv/

完美无缺。

答案 1 :(得分:0)

我现在使用scikit-video和链接的skvideo.io.FFmpegReader()功能找到了解决方法。通过这个,我能够逐帧阅读我测试的所有视频。

这是替换原始问题中代码的代码:

reader = skvideo.io.FFmpegReader("/Users/timomueller/Desktop/test_video_carcounting.mp4", inputdict=inputparameters, outputdict=outputparameters);

print "Press key `p` to pause the video to start tracking"
for img in reader.nextFrame():
    #img contains the frame - the for loop runs until there is 
    #no frame available anymore 

如果您遇到与我相同的问题,我认为scikit-video是一个很好的解决方法,我会专注于处理我的实际问题,而不是从现在开始修复OpenCV

通过pip安装非常简单。只需sudo pip install sk-video并等待命令完成。然后你可以import skvideo.io,一切都应该正常工作!

我使用此解决方法的唯一问题是img似乎有色,好像它丢失了它的颜色,或者好像有关于色彩空间,像素格式等的错误设置。对我来说这不是至关重要的,所以我会忽略它,并可能在以后工作。 (如果我找到修复程序,我会更新此答案)。对于需要正确颜色的所有人,请查看有关inputdictoutputdictskvideo.io.FFmpegReader(file, inputdict, outputdict))的文档。和FFmpeg的{​​{3}}一样。应该可以使用outputdict中的正确像素格式设置来修复有色颜色。

但是,在这种情况下,着色问题可能不会对您产生影响:我希望这会有所帮助。

如果您找到问题的实际解决方案,请务必添加您的答案!