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 之后安装了 dlib
到 homebrew
,认为它可以提供帮助(我也认为我确实需要它),但这并没有解决问题。
这是我遇到问题的代码:
# 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
等于 False
,image
等于 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、像素格式等的不正确设置。对于对我来说这并不重要,所以我会简单地忽略它并可能在以后处理它。 (如果我找到修复,我会更新这个答案)。对于需要正确颜色的每个人,请查看有关 inputdict
和 outputdict
(skvideo.io.FFmpegReader(file, inputdict, outputdict)
) 的文档。以及 FFmpeg
的 video 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/
效果很好。
感谢您的阅读,我已经尝试了一天让这个工作,但我没有接近解决方案。
我正在尝试让这个 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 之后安装了 dlib
到 homebrew
,认为它可以提供帮助(我也认为我确实需要它),但这并没有解决问题。
这是我遇到问题的代码:
# 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
等于 False
,image
等于 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、像素格式等的不正确设置。对于对我来说这并不重要,所以我会简单地忽略它并可能在以后处理它。 (如果我找到修复,我会更新这个答案)。对于需要正确颜色的每个人,请查看有关 inputdict
和 outputdict
(skvideo.io.FFmpegReader(file, inputdict, outputdict)
) 的文档。以及 FFmpeg
的 video 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/
效果很好。