代码
#include <iostream>
#include <opencv2/core.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/imgproc.hpp>
#include <opencv2/videoio.hpp>
#include <opencv2/video.hpp>
using namespace cv;
using namespace std;
Mat image, dstImage;
static int currentOprs = 0;
int g_nStructElementSize = 3;//内核矩阵的尺寸
void process() {
Mat element = getStructuringElement(MORPH_RECT, Size(g_nStructElementSize * 2 + 1, g_nStructElementSize * 2 + 1));
if (!currentOprs) {
//膨胀操作
dilate(image, dstImage, element);
}
else {
//腐蚀操作
erode(image, dstImage, element);
}
imshow("膨胀和腐蚀操作", dstImage);
}
void onTrackBar(int, void*) {
process();
}
int main(int argc, char** argv)
{
//显示原图
image = imread("700levi.jpg");
namedWindow("原图");
imshow("原图", image);
namedWindow("膨胀和腐蚀操作");
createTrackbar("膨胀或腐蚀", "膨胀和腐蚀操作", ¤tOprs, 1, onTrackBar);
createTrackbar("操作内核", "膨胀和腐蚀操作", &g_nStructElementSize, 21, onTrackBar);
//获取自定义核
Mat element = getStructuringElement(MORPH_RECT, Size(g_nStructElementSize * 2 + 1, g_nStructElementSize * 2 + 1));
dilate(image, dstImage, element);
imshow("膨胀和腐蚀操作", dstImage);
waitKey(0);
return 0;
}
效果
说明
结合滚动条来控制膨胀和腐蚀操作,主要是控制切换膨胀或腐蚀操作,修改内核范围.