形态学滤波

// ConsoleApplication36.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//#include "pch.h"
#include 
#include 
#include 
#include 
using namespace std;
using namespace cv;//************************************
//		形态学
//************************************Mat g_srcImage, g_dstImage;
int g_nElementShape = MORPH_RECT;int g_nMaxIterationNum = 10;
int g_nOpenCloseNum = 0;
int g_nErodeDilateNum = 0;
int g_nTopBlackHatNum = 0;
int g_nGradientNum = 0;
static void on_OpenClose(int, void *);
static void on_ErodeDilate(int, void *);
static void on_TopBlackHat(int, void *);
static void on_Gradient(int, void *);
static void ShowHelpText();int main()
{system("color 5E");ShowHelpText();g_srcImage = imread("C:/Users/hasee-pc/Desktop/girl.jpg");if (!g_srcImage.data){printf("error in srcImage\n");return -1;}namedWindow("【原始图】");imshow("【原始图】", g_srcImage);namedWindow("【开运算/闭运算】", 1);namedWindow("【腐蚀/膨胀】", 1);namedWindow("【顶帽/黑帽】", 1);namedWindow("【形态学梯度】", 1);g_nOpenCloseNum = 9;g_nErodeDilateNum = 9;g_nTopBlackHatNum = 2;createTrackbar("迭代值:", "【开运算/闭运算】", &g_nOpenCloseNum, g_nMaxIterationNum * 2 + 1, on_OpenClose);createTrackbar("迭代值:", "【腐蚀/膨胀】", &g_nErodeDilateNum, g_nMaxIterationNum * 2 + 1, on_ErodeDilate);createTrackbar("迭代值:", "【顶帽/黑帽】", &g_nTopBlackHatNum, g_nMaxIterationNum * 2 + 1, on_TopBlackHat);createTrackbar("迭代值:", "【形态学梯度】", &g_nGradientNum, g_nMaxIterationNum + 1, on_Gradient);while (1){int c;on_OpenClose(g_nOpenCloseNum, 0);on_ErodeDilate(g_nErodeDilateNum, 0);on_TopBlackHat(g_nTopBlackHatNum, 0);on_Gradient(g_nGradientNum, 0);c = waitKey(0);if ((char)c == 'q' || char(c) == 27)break;if ((char)c == 49)//1  椭圆形g_nElementShape = MORPH_ELLIPSE;else if ((char)c == 50)//2 矩形g_nElementShape = MORPH_RECT;else if ((char)c == 51)//3 十字形g_nElementShape = MORPH_CROSS;else if ((char)c == ' ')// 空格 三种情况循环g_nElementShape = (g_nElementShape + 1) % 3;}
//	while (char(waitKey(1) != 'q')) {}waitKey(0);
}static void on_Gradient(int, void *)
{int Absolute_offset = g_nGradientNum;Mat element = getStructuringElement(g_nElementShape, Size(Absolute_offset * 2 + 1, Absolute_offset * 2 + 1), Point(Absolute_offset, Absolute_offset));morphologyEx(g_srcImage, g_dstImage, MORPH_GRADIENT, element);imshow("【形态学梯度】", g_dstImage);
}
static void on_OpenClose(int, void *)
{int offset = g_nOpenCloseNum - g_nMaxIterationNum;//偏移量int Absolute_offset = offset > 0 ? offset : -offset;//偏移量绝对值Mat element = getStructuringElement(g_nElementShape, Size(Absolute_offset * 2 + 1, Absolute_offset * 2 + 1), Point(Absolute_offset, Absolute_offset));if (offset < 0){morphologyEx(g_srcImage, g_dstImage, MORPH_OPEN, element);}else{morphologyEx(g_srcImage, g_dstImage, MORPH_CLOSE, element);}imshow("【开运算/闭运算】", g_dstImage);
}
static void on_ErodeDilate(int, void *)
{int offset = g_nErodeDilateNum - g_nMaxIterationNum;int Absolute_offset = offset > 0 ? offset : -offset;Mat element = getStructuringElement(g_nElementShape, Size(Absolute_offset * 2 + 1, Absolute_offset * 2 + 1), Point(Absolute_offset, Absolute_offset));if (offset < 0)erode(g_srcImage, g_dstImage, element);elsedilate(g_srcImage, g_dstImage, element);imshow("【腐蚀/膨胀】", g_dstImage);
}
static void on_TopBlackHat(int, void *)
{int offset = g_nTopBlackHatNum - g_nMaxIterationNum;int Absolute_offset = offset > 0 ? offset : -offset;Mat element = getStructuringElement(g_nElementShape, Size(Absolute_offset * 2 + 1,Absolute_offset * 2 + 1), Point(Absolute_offset, Absolute_offset));if (offset < 0)morphologyEx(g_srcImage, g_dstImage, MORPH_TOPHAT, element);elsemorphologyEx(g_srcImage, g_dstImage, MORPH_BLACKHAT, element);imshow("【顶帽/黑帽】", g_dstImage);
}
static void ShowHelpText()
{cout << "1  ----> 表示椭圆形\n";cout << "2  ----> 表示矩形\n";cout << "3  ----> 表示十字形\n";cout << "q  ----> 退出\n";
}
// 运行程序: Ctrl + F5 或调试 >“开始执行(不调试)”菜单
// 调试程序: F5 或调试 >“开始调试”菜单// 入门提示: 
//   1. 使用解决方案资源管理器窗口添加/管理文件
//   2. 使用团队资源管理器窗口连接到源代码管理
//   3. 使用输出窗口查看生成输出和其他消息
//   4. 使用错误列表窗口查看错误
//   5. 转到“项目”>“添加新项”以创建新的代码文件,或转到“项目”>“添加现有项”以将现有代码文件添加到项目
//   6. 将来,若要再次打开此项目,请转到“文件”>“打开”>“项目”并选择 .sln 文件

 


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部