2017-09-05 51 views
0

感谢您阅读,我一直试图让这个工作一天,我没有接近解。OpenCV(3.3.0)返回VideoCapture与视频失败,但适用于网络摄像头[OS X]

我试图让object tracker工作。当我使用一个视频从我的摄像头(配:python object-tracker-single.py -d 0,一切正常

但只要我尝试使用视频文件(我已经尝试过不同的格式:.mp4.mkv & .avi我。也尝试使用存储库中给出的文件,但这种方式并不奏效。要查看是否存在File not found -Error,我将一条无效路径传递给该函数,并打印出一个错误,但是当我所以我使用的文件是()是有效的,没有损坏

我安装了dlibhomebrew以下this article并编译来自官方源的OpenCV。这是CMakeCache.txtCMake吐出来的。在我第一次编译它之后,我添加了opencv_contrib这个组合,认为它可以帮助(我也认为我确实需要它),但是这并没有解决问题。

这是我有问题的代码:

# 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支持问题,但不适合我的情况,因为我曾经在以前的(不OpenCV的相关)项目ffmpegCMakeCache.txt报道说ffmpeg已发现和编译成功了。

我还使用一个完全合格的文件名的视频文件,无论是导致Video device or file couldn't be opened或者给定的问题尝试。

如果你有任何想法如何这个问题可以彻底解决,对如何解决这个问题的想法或能提供给我的正确调试这种行为,我是超级高兴在这里它的方式!

已经谢谢了!

-

系统:的MacBook Pro(MacOS的塞拉利昂10.12.6

OpenCV的版本:3.3.0

DLIB版本(没有必要海事组织,但嘿):19.4.0

编辑2 cmake -DOPENCV_EXTRA_MODULES_PATH=../opencv_contrib-master/modules ../ >> result.txt的输出:pastebin

+0

您是否使用硬编码路径(例如'cam = cv2.VideoCapture(“/ home/video.mp4”)')测试了代码? – zindarod

+0

@Zindarod同样的行为,没有区别 – njoye

+0

转到您的OpenCV生成文件夹并运行'cmake .. >> result.txt',在这里发布文件。 – zindarod

回答

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))的文档。以及FFmpegvideo filters。应该可以使用outputdict中的适当像素格式设置来修复浅色。

但是,也许调色问题不会影响你,在这种情况下:我希望这有助于。

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

相关问题