1. 环境准备: Visual Studio2013, OpenCV3.1.0
在OpenCV官网下载Windows平台的EXE文件后,双击解压到指定路径下:
build目录下是支持Opencv使用的文件,source目录下是源码和历程等。
2. 增加环境变量:
3. 新建MFC应用程序对话框项目,编辑界面如下:
4. 引用库和DLL:
"视图" -- "其他窗口" -- "属性管理器":
选择"包含目录":
增加如下几个目录:
在库目录下包含如下路径:
进入链接器页面:
增加如下库:(在这里可以找到: D:\usr\opencv\opencv\build\x64\vc12\lib)
5. 测试:
在Dlg的cpp文件上面增加头文件包含和命名空间引用:
#include <opencv2\opencv.hpp>
using namespace cv;
然后在OnInitDialog()函数增加版本显示
(注意:这里的字符集是UNICODE,因此还需要进行char*到LPCWSTR的一个转换,否则会乱码,这里使用T2W转换宏来处理)
运行结果如下:
修改界面,增加一个Pictrure Control和按钮,用于打开图片并进行显示:
添加打开图片并进行显示的逻辑:
void COpenCVUtilsDlg::OnBnClickedButtonOpenPicture()
{
// TODO: 在此添加控件通知处理程序代码
TCHAR szFilter[] = _T("图片文件(*.png)|*.png|所有文件(*.*)||");
CFileDialog fileDlg(TRUE, _T("png"), NULL, 0, szFilter, this);
CString strFilePath;
if (IDOK == fileDlg.DoModal()) {
strFilePath = fileDlg.GetPathName();
int height, width;
CImage image;
CRect rect, rect1;
image.Load(_T(strFilePath));
height = image.GetHeight();
width = image.GetWidth();
m_ori_image.GetClientRect(&rect);
CDC *pDC = m_ori_image.GetDC();
SetStretchBltMode(pDC->m_hDC, STRETCH_HALFTONE);
if (width<=rect.Width() && height<=rect.Height())
{
rect1 = CRect(rect.TopLeft(), CSize(width, height));
image.StretchBlt(pDC->m_hDC, rect1, SRCCOPY);
}
else {
float xScale = (float)rect.Width() / (float)width;
float yScale = (float)rect.Height() / (float)height;
float ScaleIndex = (xScale >= yScale ? xScale : yScale);
rect1 = CRect(rect.TopLeft(), CSize((int)width*ScaleIndex, (int)height*ScaleIndex));
image.StretchBlt(pDC->m_hDC, rect1, SRCCOPY);
}
ReleaseDC(pDC);
}
}
注意,这里需要判断图片是否需要缩放显示,当图片很小时,直接显示,当图片过大,就需要进行比例缩放,否则,图片显示会很模糊:
然后,下面就是使用opencv的函数对图像进行处理了。