ホームページ データベース 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 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Windows 11 は VB6 アプリケーションをサポートしますか? Windows 11 は VB6 アプリケーションをサポートしますか? May 30, 2023 am 08:31 AM

Windows 11 では、macOS スタイルの UI 要素がさらに導入されています。再設計されたタスクバーが中央にスタート メニューを表示します。はい、位置は変更できますが、デフォルトでは中央に配置されます。コントロールセンターにもいくつかのデザインの調整が加えられています。次のアップデートでは、再設計されたメモ帳とメディア プレーヤーに加えて、Android アプリもサポートされる予定です。これらすべての機能により、Windows 11 は Windows 10 よりも優れたアップグレードになりますが、ユーザーの心の中にはある種の疑念が生じています。ユーザーや開発者の中には、遅れているかどうかにかかわらず、Windows 11 が従来のアプリケーションやテクノロジをサポートするかどうかを懸念している層がいます。 V以降

WindowsでVCRUNTIME140.dllが見つからないエラーを修正する方法 WindowsでVCRUNTIME140.dllが見つからないエラーを修正する方法 May 04, 2023 am 08:04 AM

VCRUNTIME140.dllismissing エラーは、Windows 上の Visual C++ 再頒布可能ファイルの問題です。このチュートリアルを使用して問題を解決できます。 Windows アプリケーションとソフトウェアの実行には DLL ファイルが必要です。DLL ファイルがないと、完全に動作しなくなる可能性があります。たとえば、VCRUNTIME140.dllismissing エラーが表示された場合、これは PC にこのファイルがないため、アプリケーションが起動できないことを示しています。アプリケーションのインストールが失敗したことが原因である可能性があります。 Windows Update の実行後にも表示されることがあります。ありがたいことに、簡単にできます

Golang と FFmpeg: オーディオのミキシングと分離を実現する方法 Golang と FFmpeg: オーディオのミキシングと分離を実現する方法 Sep 27, 2023 pm 02:24 PM

Golang と FFmpeg: オーディオのミキシングと分離を実装する方法、特定のコード例が必要 要約: オーディオ処理は、多くのマルチメディア アプリケーションの重要な部分です。 Golang では、FFmpeg ライブラリを使用してオーディオのミキシングと分離を実現できます。この記事では、Golang を使用して FFmpeg ライブラリを呼び出してオーディオのミキシングと分離を実現する方法を紹介し、具体的なコード例を示します。この記事を学ぶことで、読者は Golang と FFmpeg を使用してオーディオ処理を実装する方法を学ぶことができます。

GolangとFFmpegを使った動画結合の実践 GolangとFFmpegを使った動画結合の実践 Sep 28, 2023 am 08:37 AM

Golang と FFmpeg を使用したビデオ結合の実践的な紹介: 日常生活では、複数の録画ビデオを完全なビデオ ファイルに結合するなど、複数のビデオ ファイルを 1 つに結合する必要がある状況によく遭遇します。この目標を達成するために、この記事では、Golang ライブラリと FFmpeg ライブラリを使用してビデオ結合プロセスを実装する方法を紹介し、具体的なコード例を示します。 1. Golang と FFmpeg とは何ですか? Golang (Go 言語) は、によって開発されたオープンソースのプログラミング言語です。

CONCRT140.dllが見つからないエラーを修正する4つの方法 CONCRT140.dllが見つからないエラーを修正する4つの方法 Apr 25, 2023 am 09:22 AM

非常に多くのユーザーが、アプリケーションを実行しようとすると、CONCRT140.dll が見つからないためコードの実行を続行できないというエラー メッセージが表示されると報告しています。 Adobe アプリケーション、Halo、ForzaHorizo​​n5 などを開くと、CONCRT140.dll が見つからないという問題が発生する場合があります。したがって、これはアプリケーション固有の問題ではありません。適切な DLL がインストールされていないと、アプリケーションのコードはこれらのライブラリに記述されたコードに依存するため、アプリケーションは適切に動作しません。この記事では、CONCRT140.dll とは何か、それが見つからない理由、およびそれをダウンロードしてエラーを修正する方法について説明します。とは

修正: Microsoft Visual C++ 2015 再頒布可能パッケージのセットアップ失敗エラー 0x80240017 修正: Microsoft Visual C++ 2015 再頒布可能パッケージのセットアップ失敗エラー 0x80240017 Apr 18, 2023 pm 01:07 PM

Microsoft Visual C++ は、ほとんどの一般的なアプリケーションを実行するために必要な Windows オペレーティング システムの不可欠な部分になっています。現在、一部のユーザーから、Visual C++ 再頒布可能パッケージ (2015 年) または Microsoft Visual Studio 再頒布可能パッケージ (2013 年) をインストールしようとしたときに発生した問題について苦情が寄せられています。これらのユーザーによると、インストーラーが途中で停止し、「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