Maison base de données tutoriel 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

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Windows 11 prend-il en charge les applications VB6 ? Windows 11 prend-il en charge les applications VB6 ? May 30, 2023 am 08:31 AM

Windows 11 introduit davantage d'éléments d'interface utilisateur de style macOS. Vous obtenez une barre des tâches repensée avec le menu Démarrer au centre. Oui, vous pouvez modifier sa position, mais par défaut il sera placé au centre. Le centre de contrôle a également reçu quelques modifications de conception. Dans la prochaine mise à jour, la prise en charge des applications Android s'accompagnera également d'un bloc-notes et d'un lecteur multimédia repensés. Même si toutes ces fonctionnalités font de Windows 11 une belle mise à niveau par rapport à Windows 10, certains doutes germent dans l’esprit des utilisateurs. Il existe un segment d'utilisateurs et de développeurs qui se demandent si Windows 11 prendra en charge les applications et technologies héritées, qu'elles soient à la traîne ou non. Depuis V

Comment réparer l'erreur manquante VCRUNTIME140.dll sous Windows Comment réparer l'erreur manquante VCRUNTIME140.dll sous Windows May 04, 2023 am 08:04 AM

L'erreur manquante VCRUNTIME140.dll est un problème avec votre fichier redistribuable Visual C++ sous Windows. Vous pouvez utiliser ce tutoriel pour résoudre le problème. Les applications et logiciels Windows nécessitent des fichiers DLL pour s'exécuter. Sans eux, ils pourraient cesser de fonctionner complètement. Par exemple, si vous voyez une erreur VCRUNTIME140.dllmissing, cela indique que ce fichier manque sur votre PC, empêchant le lancement de l'application. Cela peut être dû à l'échec de l'installation de l'application. Il peut même apparaître après l'exécution des mises à jour Windows. Heureusement, vous pouvez facilement

Golang et FFmpeg : Comment réaliser le mixage et la séparation audio Golang et FFmpeg : Comment réaliser le mixage et la séparation audio Sep 27, 2023 pm 02:24 PM

Golang vs FFmpeg : Comment implémenter le mixage et la séparation audio, exemples de code spécifiques requis Résumé : Le traitement audio est une partie essentielle de nombreuses applications multimédias. Dans Golang, nous pouvons utiliser la bibliothèque FFmpeg pour réaliser le mixage et la séparation audio. Cet article expliquera comment utiliser Golang pour appeler la bibliothèque FFmpeg afin de réaliser le mixage et la séparation audio, et fournira des exemples de code spécifiques. En étudiant cet article, les lecteurs apprendront comment utiliser Golang et FFmpeg pour implémenter le traitement audio

Pratique de l'épissage vidéo à l'aide de Golang et FFmpeg Pratique de l'épissage vidéo à l'aide de Golang et FFmpeg Sep 28, 2023 am 08:37 AM

Introduction pratique à l'épissage vidéo à l'aide de Golang et FFmpeg : Dans la vie quotidienne, nous rencontrons souvent des situations où nous devons fusionner plusieurs fichiers vidéo en un seul, comme l'assemblage de plusieurs vidéos enregistrées en un fichier vidéo complet. Pour atteindre cet objectif, cet article présentera comment utiliser les bibliothèques Golang et FFmpeg pour implémenter le processus d'épissage vidéo et fournira des exemples de code spécifiques. 1. Que sont Golang et FFmpeg ? Golang (langage Go) est un langage de programmation open source développé par

4 méthodes pour corriger l'erreur CONCRT140.dll introuvable 4 méthodes pour corriger l'erreur CONCRT140.dll introuvable Apr 25, 2023 am 09:22 AM

De nombreux utilisateurs ont signalé que chaque fois qu'ils essayaient d'exécuter l'application, un message d'erreur était affiché indiquant que l'exécution du code ne pouvait pas continuer car CONCRT140.dll était introuvable. Lors de l'ouverture d'applications Adobe, Halo, ForzaHorizon5, etc., vous pouvez rencontrer CONCRT140.dll introuvable. Il ne s’agit donc pas d’un problème spécifique à l’application. Sans les DLL appropriées installées, les applications ne fonctionneront pas correctement car leur code dépend du code écrit dans ces bibliothèques. Dans cet article, nous apprendrons ce qu'est CONCRT140.dll et pourquoi il est manquant, et comment nous pouvons le télécharger et corriger l'erreur. qu'est-ce que

Correction : erreur d'échec de l'installation redistribuable de Microsoft Visual C++ 2015 0x80240017 Correction : erreur d'échec de l'installation redistribuable de Microsoft Visual C++ 2015 0x80240017 Apr 18, 2023 pm 01:07 PM

Microsoft Visual C++ fait désormais partie intégrante du système d'exploitation Windows requis pour exécuter les applications les plus courantes. Désormais, certains utilisateurs se sont récemment plaints des problèmes rencontrés lors de la tentative d'installation des packages redistribuables Visual C++ pour 2015 ou des packages redistribuables Microsoft Visual Studio pour 2013. Selon ces utilisateurs, le programme d'installation s'est arrêté à mi-chemin et a affiché « 0x80240017 - Erreur non spécifiée ». Cet échec peut avoir plusieurs raisons. Alors ne fais pas ça

Golang et FFmpeg : Comment implémenter la synthèse et la segmentation audio Golang et FFmpeg : Comment implémenter la synthèse et la segmentation audio Sep 27, 2023 pm 10:52 PM

Golang et FFmpeg : Comment implémenter la synthèse et la segmentation audio, des exemples de code spécifiques sont requis Résumé : Cet article présentera comment utiliser les bibliothèques Golang et FFmpeg pour implémenter la synthèse et la segmentation audio. Nous utiliserons quelques exemples de code spécifiques pour aider les lecteurs à mieux comprendre. Introduction : Avec le développement continu de la technologie de traitement audio, la synthèse et la segmentation audio sont devenues des exigences fonctionnelles courantes dans la vie quotidienne et au travail. En tant que langage de programmation rapide, efficace et facile à écrire et à maintenir, Golang, associé à FFmpeg

Comment installer l'extension PHP FFmpeg sur le serveur ? Comment installer l'extension PHP FFmpeg sur le serveur ? Mar 28, 2024 pm 02:39 PM

Comment installer l’extension PHPFFmpeg sur le serveur ? L'installation de l'extension PHPFFmpeg sur le serveur peut nous aider à traiter les fichiers audio et vidéo dans les projets PHP et à implémenter des fonctions telles que l'encodage, le décodage, l'édition et le traitement des fichiers audio et vidéo. Cet article explique comment installer l'extension PHPFFmpeg sur le serveur, ainsi que des exemples de code spécifiques. Tout d’abord, nous devons nous assurer que PHP et FFmpeg sont installés sur le serveur. Si FFmpeg n'est pas installé, vous pouvez suivre les étapes ci-dessous pour installer FFmpe

See all articles