데이터 베이스 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 Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25 : Myrise에서 모든 것을 잠금 해제하는 방법
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

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이 레거시 응용 프로그램과 기술을 지원할지, 뒤처져 있는지 여부에 대해 우려하는 사용자와 개발자 부문이 있습니다. 뷔 이후

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 업데이트를 실행한 후에도 나타날 수 있습니다. 다행히도 쉽게 할 수 있어요

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를 사용한 비디오 스플라이싱에 대한 실무 소개: 일상 생활에서 여러 개의 녹화된 비디오를 하나의 완전한 비디오 파일로 스플라이싱하는 등 여러 비디오 파일을 하나로 병합해야 하는 상황에 자주 직면합니다. 이 목표를 달성하기 위해 이 기사에서는 Golang 및 FFmpeg 라이브러리를 사용하여 비디오 접합 프로세스를 구현하는 방법을 소개하고 구체적인 코드 예제를 제공합니다. 1. Golang과 FFmpeg가 무엇인가요? Golang(Go 언어)은 Go 언어가 개발한 오픈 소스 프로그래밍 언어입니다.

CONCRT140.dll을 찾을 수 없음 오류를 수정하는 4가지 방법 CONCRT140.dll을 찾을 수 없음 오류를 수정하는 4가지 방법 Apr 25, 2023 am 09:22 AM

너무 많은 사용자가 응용 프로그램을 실행하려고 할 때마다 CONCRT140.dll을 찾을 수 없기 때문에 코드 실행을 계속할 수 없다는 오류 메시지가 발생한다고 보고했습니다. Adobe 응용 프로그램, Halo, ForzaHorizon5 등을 열 때 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 운영 체제의 필수적인 부분이 되었습니다. 이제 일부 사용자는 최근 2015용 Visual C++ 재배포 가능 패키지 또는 2013용 Microsoft Visual Studio 재배포 가능 패키지를 설치하는 동안 발생한 문제에 대해 불만을 제기했습니다. 이러한 사용자에 따르면 설치 프로그램이 중간에 중지되고 "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