https://opencv.org/releases.html
opencv下载地址如上,
下载下来之后是一个是一个exe文件,双击双击exe文件,弹出对话框,需要指定一个目录,会将opencv解压到指定目录,不需要重复指定opencv,该exe程序会自动添加opencv目录,也可以随便指定,然后复制粘贴。
有用的文件lib、dll
opencv\build\x64\vc15\lib下面的两个lib,opencv_world342.lib和opencv_world342d.lib,带d的是debug版本
新建一个MFCApplication
默认会有一个MFCApplication1Dlg
对话框中新增一个button
MFCApplication1Dlg.cpp中加入如下两个文件,并using namespace cv;不然会报错识别不到Mat、imread等
#include<opencv2\opencv.hpp>
#include<opencv2\highgui.hpp>
using namespace cv;
编写一个Mat转CImage的函数
int Mat2CImage(Mat *mat, CImage &img) {
if (!mat || mat->empty())
return -1;
int nBPP = mat->channels() * 8;
img.Create(mat->cols, mat->rows, nBPP);
if (nBPP == 8)
{
static RGBQUAD pRGB[256];
for (int i = 0; i < 256; i++)
pRGB[i].rgbBlue = pRGB[i].rgbGreen = pRGB[i].rgbRed = i;
img.SetColorTable(0, 256, pRGB);
}
uchar* psrc = mat->data;
uchar* pdst = (uchar*)img.GetBits();
int imgPitch = img.GetPitch();
for (int y = 0; y < mat->rows; y++)
{
memcpy(pdst, psrc, mat->cols*mat->channels());//mat->step is incorrect for those images created by roi (sub-images!)
psrc += mat->step;
pdst += imgPitch;
}
return 0;
}
编写点击按钮响应函数
void CMFCApplication1Dlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
Mat matImg = imread("d:\\worktips\\worktips.jpg"); //这个路径可以随便改,也可以添加一个edit控件然后从中获取输入
CImage img;
RECT rt;
Mat2CImage(&matImg, img);
this->GetClientRect(&rt);
img.Draw(this->GetDC()->GetSafeHdc(), rt);
}
就这样点击按钮只后会看到一个按钮和一张图片
如果提示找不到opencv_world342.dll
可以把E:\opencv\build\x64\vc15\bin下的opencv_world342.dll复制到生成的exe所在目录
这是第一个实例,不过从实例可以看出,单单处理一个图片不需要下载的opencv以外的其他文件,
这个示例是release x64平台,可能x86还需要自己编译库,暂时yong用不上,不做深究。