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 | 学步园相关推荐

  1. python用os.system打开wav文件_使用python读取wav格式文件

    ** 使用python读取wav格式文件 ** - 基本概念 [采样频率] 即取样频率, 指每秒钟取得声音样本的次数.采样频率越高,声音的质量也就越好,声音的还原也就越真实,但同时它占的资源比较多.由 ...

  2. Qt+OpenCV打开视频文件并在窗口界面上显示

    Qt+OpenCV打开视频文件并在窗口界面上显示 1.新建一个Qt Widgets Application,工程配置文件(.pro文件)内容如下: #------------------------- ...

  3. 使用OpenCV打开RAW文件

    首先来介绍一下关于相机的基础知识: 1.CCD/CMOS相机的感光元件对波长(即颜色)不敏感,如果拿一个裸体的CCD/CMOS传感器去拍摄图像,只能得到灰度图: 2.因为上述这条,人们必须找到能够将波 ...

  4. opencv打开mp4文件_OpenCV 实现播放本地mp4视频或远程服务mp4视频

    上代码: import cv2 # 获得视频的格式 videoCapture = cv2.VideoCapture('./mac-bruce-tpl-cn-2018_1280x720h.mp4') # ...

  5. jetson nano opencv 打开 CSI摄像头_怎样使用OpenCV打开电脑摄像头或者外接USB摄像头...

    我们如何使用OpenCV打开摄像头并获取从摄像头得到的视频流数据呢?下面,我们会使用VS2019和OpenCV实现该功能. 先上代码: #include#include using namespace ...

  6. jetson nano opencv 打开 CSI摄像头_OpenCV基础操作-读取、几何变换、阈值

    基本元素图片 OpenCV中彩色图是以B-G-R通道顺序存储的,灰度图只有一个通道,图像坐标的起始点是在左上角,所以行对应的是y,列对应的是x. import cv2img = cv2.imread( ...

  7. 手机上怎么打开python文件_如何使用一行Python命令来实现让手机读取电脑文件!...

    本文讲解python的一个内置文件传输下载器,可以用来在局域网内进行文件传输,当然可能有人会问,我用微信QQ也能传,为什么还要用python来传输下载?在此,其实我个人感觉的是,这种操作更简单,省了时 ...

  8. python中如何打开csv文件_在Python中从CSV文件读取数据

    我正在从包含以下数据的CSV文件(xyz.CSV)中读取数据: col1,col2,col3,col4 name1,empId1,241682-27638-USD-CIGGNT ,1 name2,em ...

  9. opencv 手选roi区域_【opencv学习笔记六】图像的ROI区域选择与复制

    图像的数据量还是比较大的,对整张图片进行处理会影响我们的处理效率,因此常常只对图像中我们需要的部分进行处理,也就是感兴趣区域ROI.今天我们来看一下如何设置图像的感兴趣区域ROI.以及对ROI区域图像 ...

最新文章

  1. POJ 1305 Fermat vs. Pythagoras【勾股数】
  2. ubuntu mysql增加用户_Ubuntu中给mysql添加新用户并分配权限
  3. 修改注册表 为右键添加快捷命令
  4. debian文本配置网络备忘:/etc/network/interfaces
  5. 层 数据仓库_小尝试:基于指标体系的数据仓库搭建和数据可视化
  6. Hibernate--关系映射和关联关系的CRUD
  7. 为制造业构建Teams Power App 3:创建制造商UI
  8. 基于Bayes和KNN的newsgroup 18828文本分类器的Python实现
  9. Oracle 数据脱敏
  10. 芯片封装形式(网上到处找的)
  11. Echarts 如何实现一张图现切换不同的X轴
  12. 氮化镓 服务器电源管理系统报价,氮化镓(GaN)技术推动电源管理不断革新
  13. ios html5不显示图片,为什么iOS上的Safari不显示我的HTML5视频海报?
  14. php系统性能分析论文,系统性能分析-PHP/Linux@HeFei-51CTO博客
  15. 华为4G路由器2虚拟服务器,华为4g2pro路由器虚拟服务器设置
  16. Excel单元格校验
  17. 小程序的3种副业方式,合适你来可以来
  18. Socket详解-socket建立
  19. 启动牛市的密钥藏宝计划(TPC),火热来袭!
  20. 忆恩师刘自朗,我的高中物理老师

热门文章

  1. php 汇率接口,利用yahoo汇率接口实现实时汇率转换示例 汇率转换器
  2. linux系统屏幕花屏,解决Virtual Pc下Linux花屏(屏幕显示不正常)
  3. traceroute追踪路由命令
  4. 淘宝网发起的Web服务器项目
  5. [转]文本框TextField的事件
  6. Win32多线程 -- 线程控制(暂停/继续/终止)
  7. 聚类的外部指标(Purity, ARI, NMI, ACC) 和内部指标(NCC,Entropy,Compactness,Silhouette Index),附代码 (Python 和 Matlab)
  8. DOS批处理命令-if语句
  9. JavaScript基础笔记总结
  10. 实验8:GRE协议的配置