【MFC两种视频图像採集方法】DirectShow与Opencv
效果图:
DirectShow採集核心代码:
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的更多相关文章
- 调用init方法 两种方式 一个是浏览器方法 一个是 xml中手工配置(load-on-startup)
调用init方法 两种方式 一个是浏览器方法 一个是 xml中手工配置(load-on-startup)
- GIT将本地项目上传到Github(两种简单、方便的方法)
GIT将本地项目上传到Github(两种简单.方便的方法) 一.第一种方法: 首先你需要一个github账号,所有还没有的话先去注册吧! https://github.com/ 我们使用git需要先安 ...
- php 两种获取分类树的方法
php 两种获取分类树的方法 1. /** * 获取分类树 * @param array $array 数据源 * @param int $pid 父级ID * @param int $level 分 ...
- 两种读取.xml文件的方法
这里介绍两种读取配置文件(.xml)的方法:XmlDocument及Linq to xml 首先简单创建一个配置文件: <?xml version="1.0" encodin ...
- [转]两种Sigma-Delta ADC SNR仿真方法
假设现有一组Sigma-Delta ADC输出序列,下面将介绍两种计算出相应SNR的方法.其中由cadence导出数据的CIW窗口命令为:ocPrint(?output "输出目录/输出文件 ...
- Android中两种设置全屏的方法
设置全屏的两种方法: 第一种:在配置文件里面配置: <?xml version="1.0" encoding="utf-8"?><manife ...
- 两种应该掌握的排序方法--------1.shell Sort
先了解下什么都有什么排序算法 https://en.wikipedia.org/wiki/Sorting_algorithm http://zh.wikipedia.org/zh/%E6%8E%92% ...
- Gradle实现的两种简单的多渠道打包方法
本来计划今天发Android的官方技术文档的翻译--<Gradle插件用户指南>的第五章的,不过由于昨天晚上没译完,还差几段落,所以只好推后了. 今天就说一下使用Gradle进行类似友盟这 ...
- 转: 将Eclipse代码导入到AndroidStudio的两种方式 ,测试了方法2,成功。
蛋疼,不知道为什么我的eclipse的logcat总是莫名其妙的显示一堆黄色字体的字,看不懂的那种,如下图: 然后查了一下资料,说可能是adt版本太低,手机系统太高. 然后本来想升级adt,但是各种折 ...
随机推荐
- Qt 无边框窗体改变大小 完美实现
近期,做项目用到无边框窗体,令人蛋疼的是无边框窗体大小的改变要像右边框那样,上下左右四周,而且要流畅. 网上也找了些代码,发现居然还要连接到windows事件,这显然不合常理,后来自己新建了demo, ...
- docker学习笔记1:docke环境的查看
本文的操作是在ubuntu操作系统下的. 一.环境检查 当登录一个安装了docker的机器后,首先我们要检查下docker环境如何. 1.命令:docker -v 上述命令返回安装的docker的版本 ...
- mockito中两种部分mock的实现,spy、callRealMethod
什么是类的部分mock(partial mock)?A:部分mock是说一个类的方法有些是实际调用,有些是使用mockito的stubbing(桩实现). 为什么需要部分mock? A:当需要测试一个 ...
- Fedora20安装完Nvidia后启动一直黑屏解决办法。
安装完Fedora20后,把Nvidia驱动装上后重起机器一直黑屏时,切换到命令行下:Alt+F2 登陆上去,然后直接更新: su -c ‘yum update’ ,再重起就OK了.
- HDU4544 湫湫系列故事――消灭兔子
HDU 4544 Tags: 数据结构,贪心 Analysis: 将兔子的血量从大到小排序,将箭的杀伤力从大到小排序,对于每一个兔子血量, 将比他大的杀伤力大的剑压入优先队列,优先队列自己重写,让它每 ...
- C#中ref参数及out参数对比
ref 关键字和out关键字均会导致参数通过引用来传递(相同点1).这是两者的共同点. 通过引用传递参数,会使方法中对参数所做的任何修改都将反映在该变量中. 两者还有一个共同点,那就是:若要使用 re ...
- hdu 1102 Constructing Roads(最小生成树 Prim)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1102 Problem Description There are N villages, which ...
- Spring笔记 - Bean xml装配
命名空间表 aop Provides elements for declaring aspects and for automatically proxying @AspectJannotated c ...
- java BigDecimal的使用和四舍五入及格式规范(精准数据)
• Java中的简单浮点数类型float和double不能够进行运算.不光是Java,在其它很多编程语言中也有这样的问题. 如果我们编译运行下面这个程序会看到什么? public class T ...
- C++-struct类的新特性当class用
#include <iostream> #include <iomanip> #include <string> using namespace std; stru ...