欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

#openCV学习笔记##形态学操作###提取水平线与垂直线

程序员文章站 2022-07-14 12:54:15
...
  • 原理
    图像形态学操作时候,可以通过自定义的结构元素实现结构元素对输入图像一些对象敏感、另外一些对象不敏感,这样就会让敏感的对象改变而不敏感的对象保留输出。
    膨胀,输出的像素值是结构元素覆盖下输入图像的最大像素值
    腐蚀,输出的像素值是结构元素覆盖下输入图像的最小像素值
  • 提取步骤

1.输入彩色图像 — imread

	//输入原图像
	Mat src = imread("C:/Users/XWT11/Desktop/MAGIC.jpg");
	char INPUT_WIN[] = "input image";
	char OUTPUT_WIN[] = "result image";
	namedWindow("INPUT_WIN",WINDOW_NORMAL);
	imshow("INPUT_WIN", src);

2.转换为灰度图像 — ctvColor

	//转化为灰度图像
	Mat gray_img;
	cvtColor(src, gray_img, COLOR_BGR2GRAY);//ctvColor转换色彩空间
	namedWindow("gray_img", WINDOW_NORMAL);
	imshow("gray_img", gray_img);

3.转换为二值图像 — adaptiveThreshold
函数原型

 void adaptiveThreshold( src,  dst, int maxValue, Method, Type, int bolckSize, int delta )

相关参数:
src     要二值化的灰度图
dst     二值化后的图
maxValue  二值化后要设置的那个值
method   块计算的方法(ADAPTIVE_THRESH_MEAN_C 平均值,ADAPTIVE_THRESH_GAUSSIAN_C 高斯分布加权和)
type     二值化类型(CV_THRESH_BINARY 大于为最大值,CV_THRESH_BINARY_INV 小于为最大值)
blockSize  块大小(奇数,大于1)
delta     差值(负值也可以)

	//转换为二值图像
	Mat erzhi_img;
	adaptiveThreshold(~gray_img, erzhi_img, 255, ADAPTIVE_THRESH_MEAN_C, THRESH_BINARY, 15, -2);
	namedWindow("erzhi_img", WINDOW_NORMAL);
	imshow("erzhi_img", erzhi_img);

#openCV学习笔记##形态学操作###提取水平线与垂直线
4.定义结构元素

//定义水平结构元素
Mat hline = getStructuringElement(MORPH_RECT, Size(src.cols / 16, 1), Point(-1, -1));
//定义垂直结构元素
Mat vline = getStructuringElement(MORPH_RECT, Size(1, src.rows / 16), Point(-1, -1));

5.开操作(先腐蚀后膨胀)
提取水平线

	Mat temp;
	Mat dst;
	erode(erzhi_img, dst,hline);
	dilate(dst, temp, hline)

#openCV学习笔记##形态学操作###提取水平线与垂直线提取垂直线

erode(erzhi_img, dst,vline);
dilate(dst, temp, vline)

#openCV学习笔记##形态学操作###提取水平线与垂直线

相关标签: OpenCv学习笔记