效果图:

DirectShow採集核心代码:

创建线程调用该函数,採集图像通过x264解码封装rtmp协议包。推送至FMSserver,可实现视频直播
UINT __stdcall StartVideo(void *c)
{
CVideoConf *conf = (CVideoConf *)c;
int vid = conf->code;
CString strurl(conf->rtmpurl);
CWnd *pW = conf->pW; CCameraDS camera;
if (!camera.OpenCamera(0,false));
{
TRACE("OpenCamera error.....");
} while(true)
{
CvvImage cimg;
CRect rect; IplImage *m_Frame ;
BYTE *data1 = camera.QueryFrame();
m_Frame = cvCreateImageHeader(cvSize(320,240),IPL_DEPTH_8U,3);
m_Frame->origin = 1;
cvSetData(m_Frame,data1,320*3); CDC *pDC = pW->GetDC();
HDC hDC = pDC->GetSafeHdc();
pW->GetClientRect(&rect);
cimg.CopyOf((IplImage *)m_Frame); //复制图片
cimg.DrawToHDC(hDC, &rect); //显示指定区域
HWND hWnd = pW->GetSafeHwnd();
ReleaseDC(hWnd,hDC); } return 0;
}

Opencv採集核心代码:

UINT __stdcall StartVideo(void *c)
{
CVideoConf *conf = (CVideoConf *)c;
int vid = conf->code;
CString strurl(conf->rtmpurl);
CWnd *pW = conf->pW; CCameraDS camera;
if (!camera.OpenCamera(0,false));
{
TRACE("OpenCamera error.....");
}
CvCapture* pCapture = cvCreateCameraCapture(0); //opencv打开视频
while(true)
{
CvvImage cimg;
CRect rect; IplImage *m_Frame=cvQueryFrame( pCapture );//opencv捕获帧 CDC *pDC = pW->GetDC();
HDC hDC = pDC->GetSafeHdc();
pW->GetClientRect(&rect);
cimg.CopyOf((IplImage *)m_Frame); //复制图片
cimg.DrawToHDC(hDC, &rect); //显示指定区域
HWND hWnd = pW->GetSafeHwnd();
ReleaseDC(hWnd,hDC); }


【MFC两种视频图像採集方法】DirectShow与Opencv的更多相关文章

  1. 调用init方法 两种方式 一个是浏览器方法 一个是 xml中手工配置(load-on-startup)

    调用init方法 两种方式 一个是浏览器方法 一个是 xml中手工配置(load-on-startup)

  2. GIT将本地项目上传到Github(两种简单、方便的方法)

    GIT将本地项目上传到Github(两种简单.方便的方法) 一.第一种方法: 首先你需要一个github账号,所有还没有的话先去注册吧! https://github.com/ 我们使用git需要先安 ...

  3. php 两种获取分类树的方法

    php 两种获取分类树的方法 1. /** * 获取分类树 * @param array $array 数据源 * @param int $pid 父级ID * @param int $level 分 ...

  4. 两种读取.xml文件的方法

    这里介绍两种读取配置文件(.xml)的方法:XmlDocument及Linq to xml 首先简单创建一个配置文件: <?xml version="1.0" encodin ...

  5. [转]两种Sigma-Delta ADC SNR仿真方法

    假设现有一组Sigma-Delta ADC输出序列,下面将介绍两种计算出相应SNR的方法.其中由cadence导出数据的CIW窗口命令为:ocPrint(?output "输出目录/输出文件 ...

  6. Android中两种设置全屏的方法

    设置全屏的两种方法: 第一种:在配置文件里面配置: <?xml version="1.0" encoding="utf-8"?><manife ...

  7. 两种应该掌握的排序方法--------1.shell Sort

    先了解下什么都有什么排序算法 https://en.wikipedia.org/wiki/Sorting_algorithm http://zh.wikipedia.org/zh/%E6%8E%92% ...

  8. Gradle实现的两种简单的多渠道打包方法

    本来计划今天发Android的官方技术文档的翻译--<Gradle插件用户指南>的第五章的,不过由于昨天晚上没译完,还差几段落,所以只好推后了. 今天就说一下使用Gradle进行类似友盟这 ...

  9. 转: 将Eclipse代码导入到AndroidStudio的两种方式 ,测试了方法2,成功。

    蛋疼,不知道为什么我的eclipse的logcat总是莫名其妙的显示一堆黄色字体的字,看不懂的那种,如下图: 然后查了一下资料,说可能是adt版本太低,手机系统太高. 然后本来想升级adt,但是各种折 ...

随机推荐

  1. JVM调优总结(一)-- 一些概念

    数据类型 Java虚拟机中,数据类型可以分为两类:基本类型和引用类型.基本类型的变量保存原始值,即:他代表的值就是数值本身:而引用类型的变量保存引用值.“引用值”代表了某个对象的引用,而不是对象本身, ...

  2. Java 生成本文文件的时候,Dos格式转成Unix格式

    仅仅须要在生成文本的最后 加上 sb.append("\n\r");就可以 是/n/r 不是/r/n

  3. 基于visual Studio2013解决C语言竞赛题之1027 YN

          题目 解决代码及点评 /* 计算Yn的值,直到|Yn - Yn-1|<10-6为止,并打印出此时共作了多少次COS计算. 提示:Yn+1=COS(Yn),故本 ...

  4. xml总结图--(来自传智播客视频资料)

  5. 动手学Javascript(1)——PopStar

    PopStar是一款很流行的手机游戏.它的基本规则是在某个方块上单击,如果该方块周围有和它颜色一样的方块,那么这些方块都被选中.之后在选中方块的某一个上再次单击,所有选中的方块就会消失. 如下图所示, ...

  6. 网页调试技巧:抓取马上跳转的页面POST信息或者页面内容

    http://www.qs5.org/Post/625.html 网页调试技巧:抓取马上跳转的页面POST信息或者页面内容 2016/02/02 | 心得分享 | 0 Replies 有时候调试网页或 ...

  7. 基于visual Studio2013解决面试题之0701寻找丑数

     题目

  8. 性能测试之LoardRunner工作原理

    概述: 1.VuGen 2.控制器 3.负载发生器 4.分析器 VuGen,它的作用是捕捉用户的业务流,并最终将其录制成一个脚本.在录制脚本前首先选择一种协议,接着在客户端模拟客户实际使用过程中的业务 ...

  9. Arduino Nano + WIZ550io = 简易上网

    我爱Arduino Nano – 这是一个非常好外形小巧却功能齐全的Arduino Uno.然而.当我去将它连接到互联网,全部的干净利落小巧也消失在大尺寸的以太网盾底下了. 只是,我近期发现了一个更好 ...

  10. Android Studio显示行数

    Android Studio在打开的文件左側单击鼠标右键,也能像Eclipse一样设置显示代码行数,如图1.可是这边跟Eclipse有一个非常大的差别,Eclipse设置后,其余的相应文件也跟着生效, ...