opencv打开mp4文件_【转】OpenCV读取MP4,mpeg, wmv, flv, mov, 3gp etc. on Win32 | 学步园
1、方法1
CFileDialog dlg(TRUE, _T("*.mp4"), NULL,OFN_FILEMUSTEXIST|OFN_PATHMUSTEXIST|OFN_HIDEREADONLY,_T("video files (*.avi) |*.avi|All Files (*.*)|*.*||"),NULL);
CString path ;
dlg.m_ofn.lpstrTitle= _T("OpenVedio");
if (dlg.DoModal() == IDOK) {
path = dlg.GetPathName();
}else
return;
IplImage* m_pFrame = NULL; // Declare IPL/OpenCV image pointer
HRESULT hr;
// 定义IMediaDet接口实例
CComPtr< IMediaDet > pDet;
hr = pDet.CoCreateInstance(__uuidof(MediaDet));
if (FAILED(hr))
return;
// 将影片文件名转换成BSTR类型
CComBSTR openBSTR(path);
// 设置IMediaDet接口的文件关联
hr = pDet->put_Filename(openBSTR);
if (FAILED(hr))
return ;
// 从影片中检索视频流和音频流
long lStreams;
hr = pDet->get_OutputStreams(&lStreams);
if (FAILED(hr))
return ;
// 取出影片的视频流,因为帧的信息是保存在视频流中的
bool bFound = false;
for (int i=0; i
{
GUID major_type;
hr = pDet->put_CurrentStream(i);
if (SUCCEEDED(hr))
hr = pDet->get_StreamType(&major_type);
if (FAILED(hr))
break;
if (major_type == MEDIATYPE_Video)
{
bFound = true;
break;
}
}
if (!bFound)
return ;
long width = 0, height = 0; // 存储位图的宽和高(单位:象素)
AM_MEDIA_TYPE mt;
hr = pDet->get_StreamMediaType(&mt);
if (SUCCEEDED(hr))
{
if ((mt.formattype == FORMAT_VideoInfo) && (mt.cbFormat >= sizeof(VIDEOINFOHEADER)))
{
// 得到VIDEOINFOHEADER结构指针,VIDEOINFOHEADER结构包含一些与视频
// 有关的信息,其中含有BITMAPINFORHEADER结构
VIDEOINFOHEADER *pVih = (VIDEOINFOHEADER*)(mt.pbFormat);
width = pVih->bmiHeader.biWidth;
height = pVih->bmiHeader.biHeight;
if(height < 0 ) height *= -1;
}
else
hr = VFW_E_INVALIDMEDIATYPE;
if(mt.cbFormat != 0)
{
CoTaskMemFree((PVOID)mt.pbFormat);
mt.cbFormat = 0;
}
if (mt.pUnk != NULL)
{
mt.pUnk->Release();
mt.pUnk = NULL;
}
}
if (FAILED(hr))
return ;
long size;
double time = 0.0;
double totaltime;
double rate ;
// 获取整个视频的时间长度
pDet->get_StreamLength(&totaltime);
//每秒多少帧
pDet->get_FrameRate(&rate);
cvNamedWindow( "result", 1 );
//totaltime = totaltime*rate;
m_pFrame = cvCreateImage(cvSize(width, height), IPL_DEPTH_8U, 3);
//每秒读一帧
for(time=0.0; time
{
/*
hr = pDet->EnterBitmapGrabMode(time);
if(FAILED(hr))
{
printf( "Failed in EnterBitmapGrabMode! hr=0x%x\r\n", hr );
return ;
}
CComPtr < ISampleGrabber > pGrabber = NULL;
hr = pDet->GetSampleGrabber(&pGrabber);
pGrabber->GetCurrentBuffer(&size, NULL);
long m_nBufferSize = size;
pGrabber->GetCurrentBuffer(&m_nBufferSize, (long*)m_pFrame->imageData);
*/
///*
hr = pDet->GetBitmapBits(time, &size, 0, width, height);
if (FAILED(hr))
return ;
char *pBuffer = new char[size];
if (!pBuffer)
return ;
hr = pDet->GetBitmapBits(time, 0, pBuffer, width, height);
if (FAILED(hr))
return ;
m_pFrame->imageData = pBuffer + sizeof(BITMAPINFOHEADER);
//*/
cvFlip(m_pFrame);
//detect_and_draw(m_pFrame);
cvShowImage( "result", m_pFrame );
cvWaitKey( 10 );
delete[] pBuffer;
//AfxMessageBox("t");
}
cvReleaseImage(&m_pFrame);
cvDestroyWindow("result");
2 方法:
#include "stdafx.h"
#include "cv.h"
#include "highgui.h"
#include "ffopencv.h"
int main(int argc, char* argv[])
{
IplImage *frame=NULL;
CvCapture* capture;
capture=cvCaptureFromFile_FFMPEG("lake.mpg");//D:\\Downloads\\Guns and roses\\Guns N'Roses-Welcome To The Jungle.mpg");
// capture=cvCreateFileCapture("lake.mpg");
// CvSize imgSize;
cvNamedWindow("videoS",CV_WINDOW_AUTOSIZE);
// cvResizeWindow("video1",110,1000);
cvMoveWindow( "videoS", 10, 50 ); //原始图像窗口定位
frame=cvQueryFrame(capture);
int numTotal=100000;
for(int num=1;num
{
frame=cvQueryFrame(capture);
cvShowImage("videoS", frame);
cvWaitKey(100);
}
return 0;
}
opencv打开mp4文件_【转】OpenCV读取MP4,mpeg, wmv, flv, mov, 3gp etc. on Win32 | 学步园相关推荐
- python用os.system打开wav文件_使用python读取wav格式文件
** 使用python读取wav格式文件 ** - 基本概念 [采样频率] 即取样频率, 指每秒钟取得声音样本的次数.采样频率越高,声音的质量也就越好,声音的还原也就越真实,但同时它占的资源比较多.由 ...
- Qt+OpenCV打开视频文件并在窗口界面上显示
Qt+OpenCV打开视频文件并在窗口界面上显示 1.新建一个Qt Widgets Application,工程配置文件(.pro文件)内容如下: #------------------------- ...
- 使用OpenCV打开RAW文件
首先来介绍一下关于相机的基础知识: 1.CCD/CMOS相机的感光元件对波长(即颜色)不敏感,如果拿一个裸体的CCD/CMOS传感器去拍摄图像,只能得到灰度图: 2.因为上述这条,人们必须找到能够将波 ...
- opencv打开mp4文件_OpenCV 实现播放本地mp4视频或远程服务mp4视频
上代码: import cv2 # 获得视频的格式 videoCapture = cv2.VideoCapture('./mac-bruce-tpl-cn-2018_1280x720h.mp4') # ...
- jetson nano opencv 打开 CSI摄像头_怎样使用OpenCV打开电脑摄像头或者外接USB摄像头...
我们如何使用OpenCV打开摄像头并获取从摄像头得到的视频流数据呢?下面,我们会使用VS2019和OpenCV实现该功能. 先上代码: #include#include using namespace ...
- jetson nano opencv 打开 CSI摄像头_OpenCV基础操作-读取、几何变换、阈值
基本元素图片 OpenCV中彩色图是以B-G-R通道顺序存储的,灰度图只有一个通道,图像坐标的起始点是在左上角,所以行对应的是y,列对应的是x. import cv2img = cv2.imread( ...
- 手机上怎么打开python文件_如何使用一行Python命令来实现让手机读取电脑文件!...
本文讲解python的一个内置文件传输下载器,可以用来在局域网内进行文件传输,当然可能有人会问,我用微信QQ也能传,为什么还要用python来传输下载?在此,其实我个人感觉的是,这种操作更简单,省了时 ...
- python中如何打开csv文件_在Python中从CSV文件读取数据
我正在从包含以下数据的CSV文件(xyz.CSV)中读取数据: col1,col2,col3,col4 name1,empId1,241682-27638-USD-CIGGNT ,1 name2,em ...
- opencv 手选roi区域_【opencv学习笔记六】图像的ROI区域选择与复制
图像的数据量还是比较大的,对整张图片进行处理会影响我们的处理效率,因此常常只对图像中我们需要的部分进行处理,也就是感兴趣区域ROI.今天我们来看一下如何设置图像的感兴趣区域ROI.以及对ROI区域图像 ...
最新文章
- POJ 1305 Fermat vs. Pythagoras【勾股数】
- ubuntu mysql增加用户_Ubuntu中给mysql添加新用户并分配权限
- 修改注册表 为右键添加快捷命令
- debian文本配置网络备忘:/etc/network/interfaces
- 层 数据仓库_小尝试:基于指标体系的数据仓库搭建和数据可视化
- Hibernate--关系映射和关联关系的CRUD
- 为制造业构建Teams Power App 3:创建制造商UI
- 基于Bayes和KNN的newsgroup 18828文本分类器的Python实现
- Oracle 数据脱敏
- 芯片封装形式(网上到处找的)
- Echarts 如何实现一张图现切换不同的X轴
- 氮化镓 服务器电源管理系统报价,氮化镓(GaN)技术推动电源管理不断革新
- ios html5不显示图片,为什么iOS上的Safari不显示我的HTML5视频海报?
- php系统性能分析论文,系统性能分析-PHP/Linux@HeFei-51CTO博客
- 华为4G路由器2虚拟服务器,华为4g2pro路由器虚拟服务器设置
- Excel单元格校验
- 小程序的3种副业方式,合适你来可以来
- Socket详解-socket建立
- 启动牛市的密钥藏宝计划(TPC),火热来袭!
- 忆恩师刘自朗,我的高中物理老师
热门文章
- php 汇率接口,利用yahoo汇率接口实现实时汇率转换示例 汇率转换器
- linux系统屏幕花屏,解决Virtual Pc下Linux花屏(屏幕显示不正常)
- traceroute追踪路由命令
- 淘宝网发起的Web服务器项目
- [转]文本框TextField的事件
- Win32多线程 -- 线程控制(暂停/继续/终止)
- 聚类的外部指标(Purity, ARI, NMI, ACC) 和内部指标(NCC,Entropy,Compactness,Silhouette Index),附代码 (Python 和 Matlab)
- DOS批处理命令-if语句
- JavaScript基础笔记总结
- 实验8:GRE协议的配置