首页 数据库 mysql教程 OPENCV2.3 FFMPEG Visual Studio 2008 的坑爹之旅

OPENCV2.3 FFMPEG Visual Studio 2008 的坑爹之旅

Jun 07, 2016 pm 03:33 PM
ffmpeg studio visual

使用opencv分析视频,虽然是要做研究单还要保证程序的工程性(不是只读一下特定AVI式就完了)于是乎选择了支持ffmpeg的opencv2.3 一开始没有问题,程序写的很爽,但是当我想回放一下视频片段的时候,问题一下就出来了:无法使用VideoCapture来准确的定位到视

使用opencv分析视频,虽然是要做研究单还要保证程序的工程性(不是只读一下特定AVI格式就完了)于是乎选择了支持ffmpeg的opencv2.3 

一开始没有问题,程序写的很爽,但是当我想回放一下视频片段的时候,问题一下就出来了:无法使用VideoCapture来准确的定位到视频中的某一特定时间


要解决问题:

 opencv无法正常回放视频(原因是VideoCapture::set 函数里只有一种关键帧模式,详情参见《OpenCV 2.3.1 中关于cvCaptureProperty()定位不准的问题》)


解决方案:

上面给出的链接文章已经给出了这一问题的解决方案,但是过于笼统(我怀疑他们应该是使用的linux系统),在windows下这一编译过程可以用坑爹来形容。好吧,让我们来回顾一下这一坑爹之旅。

1 要修改的代码部分请参见OpenCV 2.3.1 中关于cvCaptureProperty()定位不准的问题 这里不再重复

2 关键的问题来了:我在windows下使用cmake安装opencv的时候,根本就没有WITH_FFMPEG这个选项,而在网上查到的解决方案都是通过修改cmake而直接搞定的,简直可谓是轻松愉快加嗨皮OPENCV2.3   FFMPEG   Visual Studio 2008 的坑爹之旅 ,下面给出windows下需要修改的一些内容。

2.1 先说ffmpeg的下载安装。由于一开始不是很清楚,就去ffmpeg的网站上下了最新版本编译好的程序,结果死活有函数找不到。后来google后发现,原来是因为opencv使用的是0.7x版本的ffmpeg,下载的时候大家注意一下。http://ffmpeg.zeranoe.com/builds/在这里下载,我是懒人,我下的编译完的版本。下载完,你怎么配置环境变量我就不管了,反正最后重新编译opencv时你能想起来就行。

2.2 然后我们可以打开opencv文件夹下面 CMakeLists.txt 这个文件发现

[html] view plaincopy

  1. if(UNIX)  
  2.     set(WITH_FFMPEG ON CACHE BOOL "Include FFMPEG support")  
  3.     if(NOT APPLE)  
  4.         set(WITH_UNICAP OFF CACHE BOOL "Include Unicap support (GPL)")  
  5.         set(WITH_GTK ON CACHE BOOL "Include GTK support")  
  6.         set(WITH_GSTREAMER ON CACHE BOOL "Include Gstreamer support")  
  7.         set(WITH_V4L ON CACHE BOOL "Include Video 4 Linux support")  
  8.         set(WITH_XINE OFF CACHE BOOL "Include Xine support (GPL)")  
  9.     endif()  
  10.     set(WITH_PVAPI ON CACHE BOOL "Include Prosilica GigE support")  
  11.     set(WITH_1394 ON CACHE BOOL "Include IEEE1394 support")  
  12. endif()  
通过上面代码可以看出来,只有在UNIX环境下才会有WITH_FFMPEG这个选项,好吧,往下的牛人可以直接修改这个txt了,来构造自己的cmakelist文件,可惜我对cmake不是很熟,不是很敢修改这些代码,于是乎我就采用了一个笨一些的方法,手动去修改cmake生成的项目配置文件

找到opencv_highgui这个项目,打开cap_ffmpeg.cpp文件,你会发现这么一段预编译代码

[html] view plaincopy

  1. #ifdef HAVE_FFMPEG  
  2. #include "cap_ffmpeg_impl.hpp"  
  3. #else  
  4. #include "cap_ffmpeg_api.hpp"  
  5. #endif  
由于windows下的CMAKE没有预定义HAVE_FFMPEG 所以说我们需要在预编译指令里面加上HAVE_FFMPEG,位置在项目->属性-> c++ ->预处理器定义

2.3 下一步是将你的ffmpeg库的include文件夹加到highgui项目中去,不想细说了,还有就是ffmpeg中的静态链接库。这些没有什么难度。然后编译一下,ok,满屏的错误。

转到cap_ffmpeg_impl.hpp文件,大部分的错误是从这里来的

2.3.1 找不到msinttypes.h文件 上这里下载 http://code.google.com/p/msinttypes/ 然后塞进项目去就行了。

2.3.2 INT64_C, UINT64_C 没定义, 自己定义一下就可以了。在文件中加入

[html] view plaincopy

  1. #define INT64_C  
  2. #define UINT64_C  
2.3.3 如果提示av_open_input_file 找不到,恭喜你,你没好好看前面的内容,你下错ffmpeg啦~~ 要0.7x版本~~

2.3.4 如果报错 snprintf 这个函数找不到,我不知道这个函数在那个头文件里,我加上了结果没找到,如果你知道的话就加上对应头文件就好了。或者你可以像我似的,使用一个把这个函数改成sprintf版本

[html] view plaincopy

  1. //snprintf(oc->filename, sizeof(oc->filename), "%s", filename);  
  2.     sprintf(oc->filename, filename, "%s");  
2.3.5 我就遇到了4个要修改的地方,如果你又遇到别的错误,那只好自己慢慢修改了。

2.3.6 重新编译highgui项目,替换原有的lib,dll文件。

2.3.7 PS, 貌似还需要删除opencv_ffmpeg.dll文件,这样才能调用正确的帧跳转方法,但是删除opencv_ffmpeg后,程序就无法读取非avi类型媒体文件。 目前原因不明,有时间在慢慢鼓捣吧。

OK,整个坑爹之旅到此结束。


http://blog.csdn.net/sxy0082002/article/details/7450623

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

Windows 11 是否提供对 VB6 应用程序的支持? Windows 11 是否提供对 VB6 应用程序的支持? May 30, 2023 am 08:31 AM

Windows11引入了更多macOS风格的UI元素。您将获得重新设计的任务栏,开始菜单位于中心。是的,您可以更改它的位置,但默认情况下,它将放置在中心。控制中心还进行了一些设计调整。在下一次更新中,对Android应用程序的支持也将与重新设计的记事本和媒体播放器一起提供。尽管所有这些功能都使Windows11比Windows10有了不错的升级,但用户的脑海中正在酝酿某些疑虑。有一部分用户和开发人员担心Windows11是否会支持遗留应用程序和技术,无论是否落后。由于V

Golang与FFmpeg: 如何实现音频混音和分离 Golang与FFmpeg: 如何实现音频混音和分离 Sep 27, 2023 pm 02:24 PM

Golang与FFmpeg:如何实现音频混音和分离,需要具体代码示例摘要:音频处理是许多多媒体应用程序中必不可少的一部分。在Golang中,我们可以使用FFmpeg库来实现音频的混音和分离。本文将介绍如何使用Golang调用FFmpeg库来实现音频混音和分离,并提供了具体的代码示例。通过学习本文,读者将了解到如何使用Golang和FFmpeg来实现音频处理

如何修复 VCRUNTIME140.dll 在 Windows 上丢失错误 如何修复 VCRUNTIME140.dll 在 Windows 上丢失错误 May 04, 2023 am 08:04 AM

VCRUNTIME140.dllismissing错误是您在Windows上的VisualC++Redistributable文件存在问题。您可以使用本教程解决问题。Windows应用程序和软件需要DLL文件才能运行——没有它们,它们可能会完全停止工作。例如,如果您看到VCRUNTIME140.dllismissing错误,这表明您的PC缺少此文件,从而阻止应用程序启动。这可能是由于应用程序安装不成功。它甚至可以在运行Windows更新后出现。值得庆幸的是,您可以很容易

利用Golang和FFmpeg实现视频拼接的实践 利用Golang和FFmpeg实现视频拼接的实践 Sep 28, 2023 am 08:37 AM

利用Golang和FFmpeg实现视频拼接的实践引言:在日常生活中,我们经常会遇到需要将多个视频文件合并为一个的情况,例如将多段录制的视频拼接为一个完整的视频文件。为了实现这一目的,本文将介绍如何使用Golang和FFmpeg库来实现视频拼接的过程,并提供具体的代码示例。一、什么是Golang和FFmpeg?Golang(即Go语言)是一种开源的编程语言,由

4 修复 CONCRT140.dll 未找到错误的方法 4 修复 CONCRT140.dll 未找到错误的方法 Apr 25, 2023 am 09:22 AM

如此多的用户报告说,每当他们尝试运行应用程序时,它都会抛出一条错误消息,指出代码执行无法继续,因为未找到CONCRT140.dll。在打开Adob​​e应用程序、Halo、ForzaHorizo​​n5等时,您可能会遇到找不到CONCRT140.dll。因此,这不是特定于某个应用程序的问题。如果没有安装正确的DLL,应用程序将无法正常工作,因为它们的代码依赖于这些库中编写的代码。在本文中,我们将了解CONCRT140.dll是什么以及它丢失的原因,以及我们如何下载它并修复错误。什么是

修复:Microsoft Visual C++ 2015 Redistributable Setup Failed 错误 0x80240017 修复:Microsoft Visual C++ 2015 Redistributable Setup Failed 错误 0x80240017 Apr 18, 2023 pm 01:07 PM

MicrosoftVisualC++已成为运行大多数常见应用程序所需的Windows操作系统的组成部分。现在,一些用户最近抱怨他们在尝试安装VisualC++RedistributablePackagesfor2015或MicrosoftVisualStudioRedistributablePackagesfor2013时遇到的问题。根据这些用户的说法,安装程序中途停止并显示“0x80240017-未指定错误”.这次失败的背后可能有很多原因。因此,不要在此

Golang与FFmpeg: 如何实现音频合成和分割 Golang与FFmpeg: 如何实现音频合成和分割 Sep 27, 2023 pm 10:52 PM

Golang与FFmpeg:如何实现音频合成和分割,需要具体代码示例摘要:本文将介绍如何使用Golang和FFmpeg库来实现音频合成和分割。我们将用到一些具体的代码示例来帮助读者更好地理解。引言:随着音频处理技术的不断发展,音频合成和分割已经成为日常生活和工作中常见的功能需求。而Golang作为一种快速,高效且易于编写和维护的编程语言,加上FFmpeg作

如何在服务器上安装 PHP FFmpeg 扩展? 如何在服务器上安装 PHP FFmpeg 扩展? Mar 28, 2024 pm 02:39 PM

如何在服务器上安装PHPFFmpeg扩展?在服务器上安装PHPFFmpeg扩展可以帮助我们在PHP项目中处理音视频文件,实现音视频文件的编解码、剪辑、处理等功能。本文将介绍如何在服务器上安装PHPFFmpeg扩展,以及具体的代码示例。首先,我们需要确保服务器上已经安装了PHP以及FFmpeg。如果没有安装FFmpeg,可以按照以下步骤安装FFmpe

See all articles