#include<opencv2/highgui/highgui.hpp>
#include<opencv2/imgproc/imgproc.hpp>
using namespace cv;
int main()
{
Mat s = imread("E:/hh.jpg",IMREAD_GRAYSCALE);
namedWindow("tuxiang", CV_WINDOW_NORMAL);
Mat element = getStructuringElement(MORPH_RECT, Size(15, 15));
Mat dstImage;
erode(s, dstImage, element);
imshow("tuxiang", dstImage);
waitKey(0);
return 0;
}
ps:笔者水平有限,如有发现错误或者行文建议,麻烦各位指点,感谢感谢。
#include<opencv2/highgui/highgui.hpp>
#include<opencv2/imgproc/imgproc.hpp>
注意点1
将include下的两个文件夹以及include文件夹本身共三个文件夹全部放进包含目录。
库目录选择vc14还是vc15要看安装的visual stdio的版本,由于是vs2015版本,所以选择v14。其他的如vc9需要vs2008版本或者更高,vc11需要vs2012版本或者更高。
在选择x86的时候,#include会出现红色波浪线,改成x64即可。虽然写的是x86,但其实是应用于32位系统。x64对应于64位系统。
using namespace cv;
注意点2
cv是一个已经编写好的命名空间,是为了防止出现命名重复而出现的,类似的还有std。
Mat s = imread("E:/hh.jpg",IMREAD_COLOR);
注意点3
imread()函数,加载图像。
第一个参数为图像名称,这里用了绝对路径防止出错。
第二个个是图像类型。比如grayscale等。
namedWindow("tuxiang", CV_WINDOW_NORMAL);
注意点4
建立一个窗口,控制图像大小,如果只是读取的话,遇到分辨率太高的图片,屏幕会装不下。
Mat element = getStructuringElement(MORPH_RECT, Size(15, 15));
Mat dstImage;
erode(s, dstImage, element);
注意点5
第一步mat element 是为erode()函数确定内核。
getstructelement()函数
第一个参数是内核形状,rect,矩形。
第二个参数是内核的尺寸,从腐蚀效果来看,尺寸越大,图片会相对暗一些。因为erode()函数工作时,将会选择内核范围内的最小值(也就是最“暗”值)代替所有值,范围越大,相对最小值出现的概率越高。腐蚀对特别亮的地方影响不大,但对比较暗的地方效果会比较明显。
第三个参数是锚点位置,这里省略,默认为矩形的中心点。
erode()函数
第一个参数是输入图像,即想要出现腐蚀效果的图像。
第二个参数是输出图像。
第三个参数是内核。如果之前没有进行定义,默认是一个简单的3*3矩阵。
imshow("tuxiang", dstImage);
waitKey(0);
return 0;
注意点6
imshow()函数,就是“image show”。
第一个参数窗口名称。
第二个参数图片名称。
waitkey()函数必须写!!因为程序执行太快了,而我们必须停下来检查结果是否正确。