The last time to write the image of the corrosion, download to add the control bar.
In the opencv document has a corrosion and expansion processing, is the use of shell bar to see the program [click here], but this code is to imitate the Internet and any similarity is purely coincidental ^_^ [], is a little different from the method and opencv documents.
Clearly in the opencv document on the corrosion was introduced, I will no longer speak more. In fact, I also do not understand, also a rookie^_^
In the code, or have a look a function to use.
**********************************************************************************************
1.Mat getStructuringElement(int shape, Size ksize, Point anchor=Point(-1,-1))
shape –The shape of the elements availablevalue:
– MORPH_RECT – a rectangular structuring element
– MORPH_ELLIPSE – an elliptic structuring element, that is, a filled ellipse inscribed
into the rectangle Rect(0, 0, esize.width, 0.esize.height)
– MORPH_CROSS – a cross-shaped structuring element:
– CV_SHAPE_CUSTOM – custom structuring element (OpenCV 1.x API)
ksize –- the size of structural elements
2.int createTrackbar(const string& trackbarname, const string& winname, int* value, int count,
TrackbarCallback onChange=0, void* userdata=0)
Code:
#include "stdafx.h"
#include "opencv2/opencv.hpp"
#include <iostream>
#include <windows.h>
using namespace cv;
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
FreeConsole();
//Read image
Mat image;
image= imread("F://Opencv_picture//s4.jpg");
if(image.empty())
{
cout<<"Cannot find or open image"<<endl;
return -1;
}
//Create window
namedWindow("Image", 0);
//Create trackbar
int erosion_elem= 0;
int erosion_size= 0;
//Create corrosion control.
createTrackbar("Element", "Image", &erosion_elem, 2);
createTrackbar("Kernel", "Image", &erosion_size, 21);
while(true)
{
Mat dst;
int erosion_type;
if(erosion_elem== 0)
{
erosion_type= MORPH_RECT;
}
else if(erosion_elem==1)
{
erosion_type= MORPH_CROSS;
}
else if(erosion_elem)
{
erosion_type= MORPH_ELLIPSE;
}
Mat element= getStructuringElement(erosion_type,
Size(2* erosion_size+ 1, 2*erosion_size+ 1),
Point(erosion_size, erosion_size) );
//Corrosion operation
erode(image, dst, element);
//show image
imshow("Image", dst);
//wait untill user press any key
if(waitKey(33)== 27)
{
break;
}
}
return 0;
}
Results figure:
PS: Forget that, control Elment[0, 2] [shape] is selected, in the election of 1: MORPH_CROSS