【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学习之路(54): 自定义拖放数据对象
前面的例子都是使用的系统提供的拖放对象 QMimeData 进行拖放数据的存储,比如使用 QMimeData::setText() 创建文本,使用 QMimeData::urls() 创建 URL 对 ...
- 查询SystemFeature的方法
查询SystemFeature的方法可以在adb shell下敲如下的命令: dumpsys package 然后搜feature关键字. 例如,我的平台的SystemFeature,如下所示: Fe ...
- Fragment保持状态切换,fragment状态切换
在使用Activity管理多个Fragment时,每次切换Fragment使用的是replace,结果导致出现xxx is not currently in the FragmentManager异常 ...
- 有关android工程的构建脚本(build.xml)的学习
学习[android-sdk-linux根目录]/tools/ant/build.xml,觉得如下几点很有用,记录之 1)ant脚本中属性值是于前置定义优化的原则,即属性发生重复定义时,前面定义的值不 ...
- winform 防止主界面卡死
总结网络上的解决方案:新线程=> 委托=> 主界面的异步更新方法(IAsyncResult BeginInvoke(Delegate method)),一句话就是通过委托调用另一个线程的异 ...
- USACO inflate
全然背包,转化为0/1背包 dp[i, j] = max(dp[i-1, j], dp[i, j - minutes[i]] + points[i]) /* ID:kevin_s1 PROG:infl ...
- TraceView总结
一.TraceView简单介绍 TraceView是AndroidSDK里面自带的工具,用于对Android的应用程序以及Framework层的代码进行性能分析. TraceView是图形化的工具,终 ...
- poj3278Catch That Cow(BFS)
Catch That Cow Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 37094 Accepted: 11466 ...
- 初入Android--环境搭建
Android SDK 可以下载adt-bundle:包含了装好插件的eclipse和android sdk.下载好后,首先设置ANDROID_HOME环境变量:ANDROID_HOME=/home/ ...
- sql: sql developer使用
在sql developer中登陆某数据库,在procedure里面加入一个proc,种类选ARBOR: CREATE OR REPLACE PROCEDURE PROCEDURE23 IS NAM ...