opencv&MFC入门(三)

我们先来讲下 opencv中各个模块的简介:
顾名思义,source指的是opencv库的源码,其中的modules文件夹中imgproc、core、highgui三个部分是最基础的模块,也是学习opencv的起点。

core:实现了最核心的数据结构和基本运算,为后面的处理打下基础

highgui:实现了图像的读取、显示和存储等UI接口设计

imgproc:实现了图像处理的基本方法,包括图像的几何变换、阈值分割、平滑、形态学处理、边缘检测、频域处理等功能。

在opencv的官方文档中我们可以看到有专门的文档介绍各个模块的具体作用(由于我之前下载的是4.1.1的版本,所以这里展示的是opencv4.1.1的doc文档,大家可以根据自己的版本前往官网学习相应文档和教程):
在这里插入图片描述
除了sources文件夹外,还有一个bulid的目录,这是专门用来存放通过源码包编译好的文件,也是用来部署项目的主要文件。

说了这么多,小伙伴们肯定对于使用opencv已经跃跃欲试了吧,我们这里就从第一个最简单的例程开始学习:点击MFC窗口的button控件后自动读取并显示特定路径下的图像。

首先,我们来到资源视图中,双击之前放置好的“浏览图片”按钮,这样程序会自动跳转到该按钮的响应函数中(OnBnClickedButton1),很方便吧!

在这个函数中,我们定义一个Mat变量(之后会有所介绍),给它赋值让其等于一个路径下的图片文件,检测数据存在后再用imshow这个opencv库函数显示出来即可,是不是很简单呢?(注意imshow的第一个参数是显示图片窗口的顶部名称)

以下是这个程序的源码:

void CCVMFCAppDlg::OnBnClickedButton1()
{
	cv::Mat showimg = imread("D:\\test.jpg");//读取特定路径下的图片文件
	if (!showimg.data) {//出错处理
		return;
	}
	cv::imshow("图片展示",showimg);//新建窗口显示图片
	waitKey(0);
}

显示效果如下:在这里插入图片描述
这样我们就使用opencv完成了一个最基础的功能。
需要提示大家的是:
(1)imread中的路径一定要写对,程序代码中经常会遇到需要写路径的方式,一定要掌握,还有,C语言中一个\表示转义(如\t、\s等),所以我们写路径的时候要使用两个\,这样才是程序可以理解的路径,否则一定会出错。
(2)waitKey()函数的意义是让出现的图片不立即消失(一闪而过),其中的参数是等待的时间(以ms为单位),等于0时表示一直不消失直到按键。

我们此处编写的代码是让计算机重新创建一个窗口显示我们指定的图片,那我们可不可以让它在我们之前的画布中显示呢?
答案是可以的!

我们需要这样做:
按下button时,我们重新创建一个窗口,让该窗口与画布控件相重合,之后直接在该窗口显示图片即可,源代码如下:

void CCVMFCAppDlg::OnBnClickedButton1()
{
	namedWindow("imgshow", WINDOW_AUTOSIZE);//创建一个叫做imgshow的窗口
	HWND hWnd = (HWND)cvGetWindowHandle("imgshow");//得到它的句柄
	HWND hParent = ::GetParent(hWnd);
	::SetParent(hWnd, GetDlgItem(IDC_STATIC)->m_hWnd);
	::ShowWindow(hParent, SW_HIDE);

	cv::Mat showimg = imread("D:\\test.jpg");// TODO: 在此添加控件通知处理程序代码
	if (!showimg.data) {
		return;
	}
	cv::imshow("imgshow",showimg);
	waitKey(0);
}

效果如下:
在这里插入图片描述
这样是不是更加美观了呢?

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值