使用MFC界面显示OpenCV内容,其方法之一是将OpenCV与MFC窗口绑定,然后在MFC中直接使用OpenCV 中的代码进行输入和输出,这样方便代码的书写和搬用。这里用VS2012进行介绍。
##OpenCv与MFC进行窗口绑定:
-
首先:在解决方案资源管理中找到头文件,在头文件中找到“某某Dlg.h”的头文件文件,点进去之后在其中加好opencv的头文件,并添加好命名空间,如:
include “opencv2/opencv.hpp”
using namespace cv; -
接下来,在解决方案资源管理中找到源文件,在源文件中找到“某某Dlg.cpp”的头文件文件,点进去之后在其中’OnInitDialog’类中,找到‘// TODO: 在此添加额外的初始化代码’进行添加要运行的控件进行初始化
-
最后再对初始化的控件进行相应的操作
##例如对Button按键和显示图片控件进行显示一张图像操作:
- 首先创建Button控件和Picture control控件,如图:
- 然后添加头文件,如图:
- 接下来双击Bottom 控件或者在解决方案资源管理中找到源文件,在源文件中找到“training42Dlg.cpp”的头文件文件进入代码文件中,找到’OnInitDialog’类,在后面进行初始化
// TODO: 在此添加额外的初始化代码
CWnd *pWnd1= GetDlgItem (IDC_PIC1);//CWnd是MFC窗口类的基类,提供了微软基础类库中所有窗口类的基本功能。
pWnd1->GetClientRect (&rect1);//GetClientRect为获得控件相自身的坐标大小
namedWindow("src1",WINDOW_AUTOSIZE );//设置窗口名
HWND hWndl=(HWND )cvGetWindowHandle ("src1");//hWnd 表示窗口句柄,获取窗口句柄(若显示cvGetWindowHandle 未定义,则添加 #include opencv2/highgui/highgui_c.h 头文件)
HWND hParent1=::GetParent (hWndl );//GetParent函数一个指定子窗口的父窗口句柄
::SetParent (hWndl, GetDlgItem (IDC_PIC1)->m_hWnd );
::ShowWindow (hParent1 ,SW_HIDE );//ShowWindow指定窗口中显示
//rect1变量要在头文件中定义为CRect类,如:
public:
CRect rect1;
- 然后在Button控件函数中进行相关操作,如:
void Ctraining42Dlg::OnBnClickedButton2()
{
// TODO: 在此添加控件通知处理程序代码
Mat srcImg=imread("1.jpg");
resize (srcImg, srcImg ,Size(rect1.Width (),rect1 .Height ()) );
imshow("src1",srcImg);
}
输出结果如图:
https://www.zhihu.com/question/29611790
http://blog.youkuaiyun.com/u011432426/article/details/42874513