OpenCV (3.3.0) returns VideoCapture with Video 失败,但适用于网络摄像头 [OS X]

OpenCV (3.3.0) returns fail on VideoCapture with Video but works with Webcam [OS X]

感谢您的阅读,我已经尝试了一天让这个工作,但我没有接近解决方案。

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

但是当我尝试使用视频文件时(我尝试了不同的格式:.mp4.mkv.avi。我还尝试使用存储库中给出的文件,但效果不佳。要查看是否存在 File not found-错误,我向函数传递了无效路径并打印了错误,但在我使用时未打印其他视频。所以我正在使用的文件是(/是)有效且未损坏。

我在 this article and compiled OpenCV from the official source. This is the CMakeCache.txt that CMake spit out. After the first time I compiled it, I added opencv_contrib 之后安装了 dlibhomebrew,认为它可以提供帮助(我也认为我确实需要它),但这并没有解决问题。

这是我遇到问题的代码:

# 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()

在标记的行,retval 等于 Falseimage 等于 None。 如果我能以某种方式调试此行为,它已经对我有所帮助,但我没有找到任何方法。

我发现很多 Windows 用户有缺少 ffmpeg 支持的问题,但我的情况并非如此,因为我在之前使用了 ffmpeg (与 OpenCV 无关) ) 项目和 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.txt 的输出:pastebin

我现在使用 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 似乎有颜色,好像它失去了它的颜色,或者好像有关于颜色 space、像素格式等的不正确设置。对于对我来说这并不重要,所以我会简单地忽略它并可能在以后处理它。 (如果我找到修复,我会更新这个答案)。对于需要正确颜色的每个人,请查看有关 inputdictoutputdict (skvideo.io.FFmpegReader(file, inputdict, outputdict)) 的文档。以及 FFmpegvideo filters。应该可以使用 outputdict.

中的那个或适当的像素格式设置来修复有色颜色

但也许着色问题不会影响您,在那种情况下:我希望这对您有所帮助。

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

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

cv2.VideoCapture失败的原因,好像是OpenCV安装错误。

按照官方的安装方式:http://docs.opencv.org/trunk/d7/d9f/tutorial_linux_install.html

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

我最后只拉了一张 docker 图片: https://hub.docker.com/r/victorhcm/opencv/

效果很好。