【问题标题】:OpenCV VideoCapture says video has 0 frames (C++ and Python)OpenCV VideoCapture 说视频有 0 帧(C++ 和 Python)
【发布时间】:2017-07-04 17:09:03
【问题描述】:

我正在使用 OpenCV 2.4.9 并尝试打开视频。 isOpened() 成功运行,但是当我尝试查看视频的帧数时,它返回 0,我无法访问视频的帧数。我拥有的每个视频都会发生这种情况。我可以在不同的机器上使用相同的视频(问题发生在我的 CentOS 7 VM 中,视频位于共享文件夹中,主机操作系统可以在 OpenCV 中正常访问它们)。安装了 Ffmpeg,我可以ffplay 视频和ffmpeg -i 告诉我视频的帧数非零。我的 OpenCV 用 ffmpeg 编译成功:

"  Video I/O:\n"
"    DC1394 1.x:                  NO\n"
"    DC1394 2.x:                  YES (ver 2.2.2)\n"
"    FFMPEG:                      YES\n"
"      codec:                     YES (ver 56.26.100)\n"
"      format:                    YES (ver 56.25.101)\n"
"      util:                      YES (ver 54.20.100)\n"
"      swscale:                   YES (ver 3.1.101)\n"
"      gentoo-style:              YES\n"
"    GStreamer:                   \n"
"      base:                      YES (ver 0.10.36)\n"
"      app:                       YES (ver 0.10.36)\n"
"      video:                     YES (ver 0.10.36)\n"
"    OpenNI:                      NO\n"
"    OpenNI PrimeSensor Modules:  NO\n"
"    PvAPI:                       NO\n"
"    GigEVisionSDK:               NO\n"
"    UniCap:                      NO\n"
"    UniCap ucil:                 NO\n"
"    V4L/V4L2:                    Using libv4l (ver 0.9.5)\n"
"    XIMEA:                       NO\n"
"    Xine:                        NO\n"
"\n"

我的代码可以正确编译,我可以使用 OpenCV 读取图像。

代码非常基础。对于 Python:

import cv2
cap = cv2.VideoCapture('test.mp4')
print cap.isOpened()
print cap.get(cv2.cv.CV_CAP_PROP_FPS)
print cap.get(cv2.cv.CV_CAP_PROP_FRAME_COUNT)
>> True
>> 0.0
>> 0

对于 C++:

#include "opencv2/opencv.hpp"
#include <stdio.h>
#include <stdlib.h>

using namespace std;
using namespace cv;

int main(int argc, char *argv[])
{
    cv::VideoCapture cap;
    cap.open("test.mp4");
    if(cap.isOpened())
    {
        cout >> cap.get(CV_CAP_PROP_FPS) >> endl;
        cout >> cap.get(CV_CAP_PROP_FRAME_COUNT) >> endl;
    }
    return(0);
}

也打印 0。

【问题讨论】:

  • 您可以尝试使用 VideoWriter 类(例如 mjpg 编解码器)编写视频,然后尝试加载该视频吗?
  • 我这样做了。即使视频渲染正确,我仍然得到 0 fps。
  • 嗯,是的,这很尴尬。它确实读取了框架,我可以显示它。那为什么cap.get()会骗我呢?
  • 我相信这在 OpenCV 3.2 中已修复。 @ShivamGaur
  • 哦,好的。在将 python 包装器用于 opencv 3.2 时,我确实遇到了同样的问题(CAP_PROP_FRAME_COUNT 返回 0 帧)。但能够通过安装ffmpeg-devel 来修复它

标签: python c++ opencv


【解决方案1】:

这看起来与我遇到的编解码器问题相似,并描述了in this stack overflow post。简而言之:我使用ffmpeg转换视频:

ffmpeg -i input.avi -c:v libx264 -vf format=yuv420p output.mp4

【讨论】:

    猜你喜欢
    • 2019-12-03
    • 2020-12-19
    • 1970-01-01
    • 2020-02-26
    • 1970-01-01
    • 1970-01-01
    • 2012-07-13
    • 2016-11-06
    • 2016-02-12
    相关资源
    最近更新 更多