上一次写了图像的腐蚀,下载为其加上控制条。
在opencv文档上有一个腐蚀和膨胀处理,是使用壳控制条的程序【要看的点击这里】,但我这的代码是模仿网上大牛的【如有雷同纯属巧合^_^】,该方法和opencv文档的方法有点不同。
在opencv文档对腐蚀介绍得很清楚,我就不再多讲了。其实我也不太懂,也是菜鸟一个^_^
在上代码前,还是看看要用的函数。
**********************************************************************************************
1.Mat getStructuringElement(int shape, Size ksize, Point anchor=Point(-1,-1))
shape –元素的形状可用值:
– 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 –-结构元素大小
2.int createTrackbar(const string& trackbarname, const string& winname, int* value, int count,
TrackbarCallback onChange=0, void* userdata=0)
代码:
#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;
//创建腐蚀控制条
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) );
//腐蚀操作
erode(image, dst, element);
//show image
imshow("Image", dst);
//wait untill user press any key
if(waitKey(33)== 27)
{
break;
}
}
return 0;
}
结果图:
PS:忘了说明,控制条Elment[0, 2] 的是选择 【shape】,图中选的是1:MORPH_CROSS