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

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

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);

在这里插入图片描述
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)

在这里插入图片描述提取垂直线

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

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值