知乎上有一个问题“在mfc框架中,有上面方法能直接将opencv2.0库中的Mat格式图片传递到Picture Control”中显示?
一直以来,我使用的方法都是shiqiyu在opencvchina上面提供的引入directshow,并且采用cvvimage和cameraDs的方法。这个方法虽然在xp/win7/win8下面都能够成果使用,但是一直以来我都没有动机去深入看一看这个方法。这次在知乎上面看到 jie wu 提出的“将Opencv窗口添加到PictureControl”中的方法,感到思路很好,进行了具体实现
http://pan.baidu.com/s/1nuixdhR
{
CFormView : :OnInitialUpdate();
GetParentFrame() - >RecalcLayout();
ResizeParentToFit();
//根据控件的大小设置初始帧的大小
CRect rect;
GetDlgItem(IDC_PBSRC) - >GetClientRect( &rect ); // 获取控件尺寸位置
m_lframe = Mat : :zeros(rect.Height(),rect.Width(),CV_8UC3);
GetDlgItem(IDC_PBSRC) - >GetClientRect( &rect );
m_rframe = Mat : :zeros(rect.Height(),rect.Width(),CV_8UC3);
//绑定Mat到Picturebox上去
namedWindow( "src",WINDOW_AUTOSIZE);
HWND hWnd = (HWND)cvGetWindowHandle( "src");
HWND hParnt = : :GetParent(hWnd);
: :SetParent(hWnd,GetDlgItem(IDC_PBSRC) - >m_hWnd);
: :ShowWindow(hParnt,SW_HIDE);
namedWindow( "dst",WINDOW_AUTOSIZE);
hWnd = (HWND)cvGetWindowHandle( "dst");
hParnt = : :GetParent(hWnd);
: :SetParent(hWnd,GetDlgItem(IDC_PBDEST) - >m_hWnd);
: :ShowWindow(hParnt,SW_HIDE);
}
{
CFormView : :OnSize(nType, cx, cy);
CWnd * pwndsrc = GetDlgItem(IDC_PBSRC);
CWnd * pwnddst = GetDlgItem(IDC_PBDEST);
//计算出长宽,这里的长宽是按照比例的,图像居中显示
int iblank = 15; //边界空余
int iwidth = cx / 2 -iblank * 2;
int iheight =( int)(iwidth * 0. 75);
if (pwndsrc - >GetSafeHwnd() && pwnddst - >GetSafeHwnd()){
pwndsrc - >MoveWindow(iblank,(cy -iheight) * 0. 4,iwidth,iheight);
pwnddst - >MoveWindow(cx / 2 +iblank,(cy -iheight) * 0. 4,iwidth,iheight);
}
}
{
if (src.empty())
return;
CRect rect;
Mat dst = src.clone();
GetDlgItem(ID) - >GetClientRect( &rect ); // 获取控件尺寸位置
if (dst.channels() == 1)
cvtColor(dst, dst, CV_GRAY2BGR);
resize(dst,dst,Size(rect.Width(),rect.Height()));
imshow( "src",dst);
}
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
RANSAC和Flitline
【blog算法原理】RANSAC和FitLine 如果已经有一系列图片,需要拟合出最为合适的一条直线出来,这个时候你会选择RANSAC还是FitLine。 一、算法定义; RANSAC是实际运用非常广泛的算法,它的数学表示为 "Ransac 是解决这类问题的代表性算法。它是一种随机算法,步骤如下: 输入:k,n,t,d,model,dataBestModel = null;迭代k次——(1)从data中随机取出n个点,用这n个点去拟合model和模型的model,将得到的带参数的model记为MaybeBestModel。(2)依次取出剩下的点,计算该点对应MaybeBestModel模型的误差,如果这个误差小于阈值t,则认为这个点是有效的,把这个点也放进MaybeBestModel中。(3)所有点取完了。这时,MaybeBestModel中有效点的数量是否大于或等于d,如果是,则对于MaybeBestModel,重新计算一下它的模型参数。 (4)评估一下MaybeBestModel和BestModel哪一个好?如果MaybeBestModel更好,则将MaybeBestMod...
- 下一篇
iOS触动精灵模拟触控类外挂原理分析
一、外挂功能: 类似于模拟按键,该类型外挂主要用于通过图像识别,利用luac脚本对图像进行识别。而后再通过私有api实现触屏操作的功能。 二、外挂特征 外挂安装后,会有下面三个主要程序,touchsprite,tsevent,tsdeamon. 其中,touchsprite为gui的界面程序,其主要功能为提供交互界面由用户选择加载的脚本。(脚本保存在/User/Media/TouchSprite/lua中) 三、外挂实现 另外两个程序则为实现模拟触控的核心程序。 其中tsdeamon为守护进程,监控手机的音量的“-”按键事件(用于弹出是否运行脚本的窗口),以及负责解析lua脚本。并将脚本中的触控事件通过共享内存,交由tsevent处理 而tsevent则主要负责处理模拟触控信息,其利用苹果的一系列私有api: 实现模拟触控的功能
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
-
Docker使用Oracle官方镜像安装(12C,18C,19C)
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS8编译安装MySQL8.0.19
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
推荐阅读
最新文章
- MySQL8.0.19开启GTID主从同步CentOS8
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- CentOS8编译安装MySQL8.0.19
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- SpringBoot2整合Redis,开启缓存,提高访问速度
- CentOS关闭SELinux安全模块
- Hadoop3单机部署,实现最简伪集群
- CentOS6,7,8上安装Nginx,支持https2.0的开启