众所周知,Opencv 在图像处理方面具有无与伦比的优势,但其在视频解码这块实在不敢恭维,智能识别 AVI 封装和少数几种 编码格式。
其实 OpenCV 解码也是引用的 FFmpeg,不过编译时估计做了限制。
下面的代码实现的功能是,,FFmpeg 解码视频,然后将每一帧转换为 OpenCV 可以识别的图像格式,在 MFC 图片空间中显示。
配置:VS2008,OpenCV2.4.4,FFmpeg 为11月末的最新版本。
至于工程配置,自己根据实际情况斟酌。
主线程解码存在锁死情况,所以采用了定时器。便于后期的图像处理。
//Dlg.h
#pragma once
#ifndef INT64_C
#define INT64_C(c) (c##LL)
#define UINT64_C(c) (c##LL)
#endif
#ifdef __cplusplus
extern "C"{
#endif
#include "libavformat/avformat.h"
#include "libavcodec/avcodec.h"
#include "libswscale/swscale.h"
#ifdef __cplusplus
}
#endif
#include "cv.h"
#include "highgui.h"
#include "CvvImage.h"
#pragma comment(lib, "swscale.lib")
#pragma comment(lib, "avcodec.lib")
#pragma comment(lib, "avutil.lib")
#pragma comment(lib, "avformat.lib