形态学操作。
膨胀:结构B在图像A上面移动,B的中心定义为锚点,计算B覆盖下A的最大像素值来替换锚点的像素,B的形状可以是任意的。膨胀类似于中值滤波时取最大值而不是中间值,且滤波时核的形状比较单一,但是膨胀中B的形状可以为矩形,圆形等。
Mat structure_element = getStructuringElement(MORPH_RECT, Size(3,3)); //定义B的形状及大小
dilate(src, dst, structure_element); //膨胀
腐蚀:结构B在图像A上面移动,B的中心定义为锚点,计算B覆盖下A的最小像素值来替换锚点的像素,B的形状可以是任意的。
Mat structure_element = getStructuringElement(MORPH_RECT, Size(3,3));
erode(src, dst2, structure_element); //腐蚀
#include <opencv2/opencv.hpp>
#include <iostream>
#include <math.h>
using namespace std;
using namespace cv;
int main(){
Mat src, dst, dst2;
src = imread("/Users/ming/Documents/test.jpg");
if (!src.data){
printf("cannot load image ...");
return -1;
}
namedWindow("src img", CV_WINDOW_AUTOSIZE);
imshow("src img", src);
Mat structure_element = getStructuringElement(MORPH_RECT, Size(3,3)); //设置膨胀/腐蚀的核为矩形,大小为3*3
dilate(src, dst, structure_element); //膨胀
// erode(dst, dst, structure_element); //先膨胀后腐蚀
namedWindow("dilate img", CV_WINDOW_AUTOSIZE);
imshow("dilate img", dst);
erode(src, dst2, structure_element); //腐蚀
namedWindow("erode img", CV_WINDOW_AUTOSIZE);
imshow("erode img", dst2);
waitKey(0);
return 0;
}
使用createTrackbar创建滑动按钮,动态调节腐蚀参数。
#include <opencv2/opencv.hpp>
#include <iostream>
#include <math.h>
using namespace std;
using namespace cv;
void callback_demo(int ,void*);
int element_size = 1, max_size = 10;
string window_name = "dilate img";
Mat src ,dst;
int main(){
src = imread("/Users/ming/Documents/test.jpg");
if (!src.data){
printf("cannot load image ...");
return -1;
}
namedWindow("src img", CV_WINDOW_AUTOSIZE);
imshow("src img", src);
namedWindow(window_name, CV_WINDOW_AUTOSIZE);
createTrackbar("element size", window_name, &element_size, max_size, callback_demo); //利用回调函数创建滑动按钮示例
callback_demo(0, 0);
waitKey(0);
return 0;
}
void callback_demo(int, void*){
cout << "element_size: " << element_size << endl;
int s = element_size * 2 + 1;
Mat structure_element = getStructuringElement(MORPH_RECT, Size(s,s)); //设置膨胀/腐蚀的核为矩形,大小为3*3
dilate(src, dst, structure_element); //膨胀
// erode(src, dst, structure_element); //腐蚀
imshow(window_name, dst);
return;
}