使用opencv

时间:2018-07-17 13:20:34

标签: python opencv

我正在尝试使用python中的openCV读取视频文件。我使用一个简单的测试来检查是否有返回的帧:

vid = cv.VideoCapture(video_path)
ok, image = vid.read()
if not ok:
  break

好吧,直到我发现一些视频在读取视频中间的某些帧时遇到一些困难为止,这似乎还不错。例如,我可以使用imageio来阅读相同的视频,所以我猜有一种阅读方法。我使用以下方法计算了“损坏的”帧的数量:

for video_path in videos_list:
    vid = cv.VideoCapture(video_path)
    fr = 1
    counter = 0
    max_corrupted_frames = 20
    while True:
        ok, image = vid.read()
        if not ok:
            counter += 1
        else:
            if counter:
                print('{} consecutive frames were not able to be read before frame {} in video {}'.format(
                    counter, fr, video_path))
            counter = 0
        if counter > max_corrupted_frames:
            break
        fr += 1

在我的情况下介于1和4之间。使用更大的阈值,我可以确定视频是否已结束,或者在读取帧时遇到一些麻烦,但是这种方法似乎容易出错。

因此,出现了几个问题:

  • 还有其他方法可以确定视频是否已使用openCV结束(method using cap.isOpened()出于某种原因对我不起作用)?
  • 在我的情况下,为什么openCV无法读取那些框架,而imageio却不能?框架看起来很正常(使用imageio提取时)。

如果正在使用python 3.5.2,我正在Ubuntu 16.04中使用openCV 3.4.1,

0 个答案:

没有答案