#include <stdafx.h>
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int trackbar_value=0;//为0腐蚀操作,为1膨胀操作
int elementsize= 3;//内核尺寸大小
/*----------------------------------------------------------------------------全局变量声明-----------------------------------------------------------------*/
Mat src,out_image;
/*---------------------------------------------------------------------------全局函数声明---------------------------------------------------------------*/
void on_trackbar(int ,void*);
/*-----------------------------------------------------------------------------主函数声明--------------------------------------------------------------*/
int main()
{
src = imread("1.jpg");
if (!src.data)
{
cout << "Could not load the image!..." << endl;
return -1;
}
/*----------------------------------------------------------------------显示原图像-----------------------------------------------------------------*/
namedWindow("原始图",CV_WINDOW_AUTOSIZE);
imshow("原始图",src);
/*----------------------------------------------------------------------创建图像窗口-----------------------------------------------------------------*/
namedWindow("效果图");
/*----------------------------------------------------------------------创建进度条-----------------------------------------------------------------*/
createTrackbar("腐蚀/膨胀","效果图", &trackbar_value, 1,on_trackbar);
on_trackbar(trackbar_value, 0);//调用同一个回调函数
createTrackbar("内核大小", "效果图", &elementsize, 50, on_trackbar);
on_trackbar(elementsize, 0);//调用同一个回调函数
waitKey(0);
return 0;
}
/*--------------------------------------------------------------------------进度条回调函数----------------------------------------------------------------*/
void on_trackbar(int, void*)
{ //Size(trackbar_value*2+1, trackbar_value * 2+1)一定要写成变量式子形式,否则size里面是常量并且滑动条滑动时,图像不会发生动态变化
if(trackbar_value==0)
{
Mat element1 = getStructuringElement(MORPH_RECT,Size(elementsize *2+1, elementsize * 2+1),Point(-1,-1));//内核
erode (src, out_image, element1);//原图像、目标图像、内核尺寸。腐蚀操作
}
else
{
Mat element2 = getStructuringElement(MORPH_RECT, Size(elementsize * 2 + 1, elementsize * 2 + 1), Point(-1, -1));
dilate(src, out_image, element2);//原图像、目标图像、内核尺寸。膨胀操作
}
imshow("效果图", out_image);
}