使用 OpenCV 打开并读取 avi 文件 - Ubuntu

2024-03-01

我刚刚在 R. Laganiere 的《OpenCV 2 计算机视觉应用编程手册》一书中读到了这一点:

需要注意的是,为了打开指定的视频 文件,您的计算机必须安装相应的编解码器, 否则 cv::VideoCapture 将无法理解输入 文件。通常,如果您能够打开带有视频的视频文件 机器上的播放器(例如 Windows Media Player),然后是 OpenCV 也应该能够读取这个文件。

不幸的是,事情对我来说并不那么容易。是的,我可以在视频播放器上读取 avi 文件,但它不适用于我的 OpenCV-Qt 应用程序。 VideoCapture isOpen() 方法返回 false,尽管路径是正确的,并且所需的每个编解码器似乎都在这里。我尝试了几个文件,所以它与一种特定格式无关。

这里有人有在 Ubuntu 中使用 OpenCV 打开 avi 文件的经验吗?我认为这是一个大问题,在互联网上找不到任何真正相关的解决方案......

谢谢 !!

[编辑] 这是我正在开发的功能;这里的一些变量是类成员,所以它可能看起来不完整。然而,正是这段代码不起作用。特别是,我实例化一个新的 VideoCapture 对象的行。

void MainWindow::on_actionOuvrir_fichier_triggered()
{
    //mettre a -1 streamId
    streamId = -1;
    //get path to the avi file
    QString fileName = QFileDialog::getOpenFileName(this,tr("Ouvrir fichier video"),"/home", tr("Videos (*.avi)"));
    std::string utf8_text = fileName.toUtf8().constData();
    //open .avi
    capture = new VideoCapture(utf8_text);
    //check 
    if(!capture->isOpened())
        cout << "probleme ouverture fichier video" << endl;
    //delay between each frame in ms
    rate = capture->get(CV_CAP_PROP_FPS);
    delay = 1000 / rate;
    //start Qtimer recordId
    recordId = startTimer(delay);
    //capture first frame
    if(!capture->read(in))
        cout << "probleme lecture frame fichier video" << endl;
}

[编辑2]在Windows 7上测试

void MainWindow::on_actionOuvrir_fichier_triggered()
{
    //mettre a -1 streamId
    streamId = -1;
    //ouvrir fenetre navigation fichiers pour recuperer path vers .avi
    QString fileName = QFileDialog::getOpenFileName(this,tr("Ouvrir fichier video"),"/home",
                                                    tr("Videos (*.avi)"));
    //std::string utf8_text = fileName.toUtf8().constData();
    std::string current_locale_text = fileName.toLocal8Bit().constData();
    if(QDir().exists(current_locale_text.c_str())) std::cout << "Path is good!" << endl;
    //ouvrir .avi
    capture = new VideoCapture(current_locale_text);
    //check ouverture
    if(!capture->isOpened())
        cout << "probleme ouverture fichier video" << endl;
    //calculer delay between each frame in ms
//    rate = capture->get(CV_CAP_PROP_FPS);
//    delay = 1000 / rate;
    //demarrer timer recordId
    recordId = startTimer(100);
    //capture premiere frame
    if(!capture->read(in))
        cout << "probleme lecture frame fichier video" << endl;
}

使用该代码,我可以打开一些 avi 文件,但不是全部(实际上远非如此)。所以我想我肯定有编解码器问题...有人可以告诉我如何在 Ubuntu 下解决这个问题吗?别让我继续悬赏那个人!非常感谢。

[编辑3] 正如建议的Etienne https://stackoverflow.com/users/461338/etienne,我按照说明进行操作here http://opencv.willowgarage.com/wiki/VideoCodecs并尝试使用 mencoder 和给定的命令行将我的视频转换为 OpenCV 在所有平台上支持的 I420 格式。因此,根据 VLC,我从 24 位 RGB (RV24) 编解码器改为 Planar 4:2:0 YUV (I420)。但同样的行为,我仍然无法实例化 VideoCapture 对象。

有很多未解决的案件 https://stackoverflow.com/questions/6971231/first-time-using-open-cv-not-able-to-play-avi-file与我在 Stack Overflow 上的类似...


我终于设法解决了我的问题。

我做了什么 :

  • 尝试打开一些视频,最终找到一个合适的视频。幸运的是,我只用了 3 个视频就找到了一个有效的视频。

  • 使用 VLC 检查编解码器。它是 MPEG-4 XVID。

  • 使用mencoder将我要读取的文件转换为XVID:

    sudo mencoder myFile.avi -ovc lavc vcodec=mpeg4:mbd=2:cbp:trell:vbitrate=300 -ffourcc XVID -o test.avi

我也换成旧的C功能cvCaptureFromFile()。我会回到C++接口以确保这确实是一个编解码器问题,但我很确定它是([EDIT]这是一个编解码器问题)。

什么没有奏效 :

  • 重新编译 OpenCV 并启用 Qt 支持
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 OpenCV 打开并读取 avi 文件 - Ubuntu 的相关文章

随机推荐

  • Google 地图 - FusionTablesLayer 到多边形

    我正在使用 Google Maps API 和 jquery ui maps 这个问题与运行良好的插件无关 我已经为除莫桑比克之外的所有国家 地区创建了 FusionTablesLayer 用户可以放置标记并重新定位它 如果他尝试将标记放置
  • CSS3单向转换?

    使用 CSS3 过渡 可以对任何属性产生 平滑向上 和 平滑向下 效果 我可以将其设置为仅具有 平滑 效果吗 我希望解决方案仅使用 CSS 尽可能避免使用 JavaScript 逻辑流程 用户点击元素 背景颜色从白色变为黑色需要 0 5 秒
  • 尝试使用 docker 推送映像时出现“设备或资源繁忙”错误

    当推送到官方注册表时 我收到以下错误 无法生成图层存档 在 var lib docker devicemapper mnt ed78b67d527d9 上安装 dev mapper docker 202 1 399203 ed78b67d5
  • 如何在 MySQL 更新查询中使用 If Then Else?

    我想像这样更新 MySQL 中的表 UPDATE Table SET A 20 IF A gt 20 SET A A IF A lt 20 SET A 0 IF A lt 1 WHERE A IS NOT NULL 但上面的 SQL 语法无
  • 具有多个视图的 Android 应用程序 - 最佳实践?

    我是 Android 开发新手 我对一些最佳实践有疑问 我的应用程序就像一个仪表板 可以从中启动和完成多个不同的 子活动 我想知道构建应用程序的最佳方式是什么 一种方法是采用不同的布局并适当地加载和卸载它们 另一种是使用意图开始新的活动 至
  • 为什么异步数组映射返回承诺,而不是值

    请参阅下面的代码 var arr await 1 2 3 4 5 map async index gt return await new Promise resolve reject gt setTimeout gt resolve ind
  • 使用 OllyDbg 破解 C# 应用程序

    我想知道是否有办法用 OllyDebug 破解 C Windows 应用程序 我有一个用 Visual C 2010 Express 编写的简单的我自己的 CrackMe 应用程序 当我用 OllyDebug 打开它并根据需要修改 ASM
  • Java 从 ConcurrentHashMap 中删除特定项

    使用remove 方法可以吗 我读过一篇文章 说remove方法中还没有添加同步功能 如何正确删除specificConcurrentHashMap 中的项目 示例代码 ConcurrentHashMap
  • 是否可以使用或需要 Perl 脚本而不执行其语句?

    我需要对一些旧脚本添加单元测试 这些脚本基本上都是以下形式 usr bin perl Main code foo bar subs sub foo sub bar 如果我尝试在单元测试中 要求 此代码 则代码的主要部分将运行 因为我希望能够
  • com/android/dx/command/dexer/Main :不支持的 Major.minor 版本 52.0

    如何修复 com android dx command dexer Main 不支持的 Major minor 版本 52 0 错误图片当我单击 作为 Android 应用程序运行 时 https i stack imgur com iYj
  • CSS3 动画图像的比例

    我尝试像灯箱一样缩放图像 运行时图像的大小发生变化但没有动画 div class img rectangular div class DNNModuleContent ModDNNHTMLC div class Normal img alt
  • 访问 CODEIGNITER 中被认为已禁用的功能时出现问题

    我意识到我的申请中有一个非常重要的问题 这是关于雇用功能的 即使申请人已经被雇用 如果客户点击提案页面上的拒绝按钮 状态也会从 已批准 更改为 已拒绝 我想我应该改变这部分的一些东西 public function approve job
  • 使用 SOAP Web 服务而不依赖 app.config

    我正在构建一个将调用外部 Web 服务的 NET 组件 我使用 添加服务引用 对话框将 Web 服务添加到我的组件中 该组件生成使用该服务所需的代码并将设置添加到 app config 文件中 我通过从控制台应用程序添加对其 DLL 的引用
  • 从 Tap 获取 UILabel 中字符的索引

    我想获取 UILabel 上点击的字符的索引 我已经对 UILabel 进行了子类化 在我的 awakeFromNib 中我有这个 layoutManager NSLayoutManager textStorage NSTextStorag
  • LINQ to Objects .Distinct() 不拉出不同的对象

    我有两种模糊搜索客户的方法 一种是缩写名称 另一种是客户的全名 当我获取这两个结果集然后将它们合并在一起 我已经阅读了几个地方应该删除不同的值 时 我得到了重复项 认为我需要做的就是打电话给 Distinct 方法 我也仍然得到重复 我是否
  • 在pentaho中..如何传递包含作业中所有连接参数定义的文本文件?

    我正在使用 jdbc 连接 并使用示例 sample db connection 传递参数 并且该参数已在服务器中的文本文件中定义为sample db connection localhost 并且我想在作业步骤中传递文本文件 以便每当作业
  • 发送和接收 SOAP 消息

    我正在用 C 编写一个 Web 服务客户端 不想创建和序列化 反序列化对象 而是发送和接收原始 XML 这在 C 中可能吗 这是我刚刚根据 John M Gant 的示例运行的实现的一部分 设置内容类型请求标头非常重要 再加上我的请求需要凭
  • 使用 SSL 和客户端证书身份验证保护 ASP.NET MVC 应用程序

    我希望通过 SSL 和客户端证书身份验证来保护 ASP NET MVC 应用程序的安全 我使用的是 IIS 7 5 Windows Server 2008 R2 我想知道是否可以通过 Web config 执行以下操作 必须通过那里 所有请
  • 如何创建链接标签云[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我需要生成一个文本链接云 类似于所附的图像 由于有些文字是垂直的 我正在考虑通过 CSS3 来实现 但这会消耗大量时间 你知道有什么网
  • 使用 OpenCV 打开并读取 avi 文件 - Ubuntu

    我刚刚在 R Laganiere 的 OpenCV 2 计算机视觉应用编程手册 一书中读到了这一点 需要注意的是 为了打开指定的视频 文件 您的计算机必须安装相应的编解码器 否则 cv VideoCapture 将无法理解输入 文件 通常