13 - 形态学操作应用一 :提取水平线和垂直线

13 - 形态学操作应用一 提取水平线和垂直线
代码和注释:
 


#include<opencv2/opencv.hpp>;
#include<iostream>;
#include<opencv2/imgproc/types_c.h>;
using namespace std;
using namespace cv;

int main(int argc, char* argv) {  // 13 - 形态学操作实际应用一:提取水平与垂直线
	Mat source1;
	source1 = imread("F:\\OpenCV-Test\\TestPicture\\SourcePicture1\\12.jpg");
	if (source1.empty()) { printf("can not load image ... \n"); return -1; }
	imshow("source1原图像", source1);

	Mat source1Gray;
	cvtColor(source1,source1Gray,CV_BGR2GRAY); // #include<opencv2/imgproc/types_c.h>;  CV_BGR2GRAY=6
	//cvtColor(source1,source1Gray,6); //将彩色图 灰度化
	imshow("source1Gray", source1Gray);

	Mat source1GrayBinaryzation; 
	adaptiveThreshold(~source1Gray, source1GrayBinaryzation,255,ADAPTIVE_THRESH_MEAN_C,THRESH_BINARY,15,-2);//将灰度图 二值化
	//取反灰度图像,二值化图像,最大值,自适应阈值算法,指定阈值类型,邻域块模板大小,算法相关常数参数
	imshow("source1GrayBinaryzation", source1GrayBinaryzation);

	Mat Xline = getStructuringElement(MORPH_RECT, Size(source1.cols/16,1),Point(-1, -1));//水平线 X方向
	// 结构元素:  矩形,大小,锚点
	Mat Yline = getStructuringElement(MORPH_RECT, Size(1,source1.rows/16),Point(-1, -1)); //垂直线 Y方向

	Mat temp, resultXline;
	erode(source1GrayBinaryzation, temp, Xline); //将二值化图像 通过 水平线 腐蚀
	dilate(temp, resultXline, Xline); //将腐蚀后的二值化图像进行 垂直线 膨胀
	//morphologyEx(source1GrayBinaryzation,resultXline,MORPH_OPEN,Xline); // 开操作
	bitwise_not(resultXline, resultXline); //反转像素,原图像白色背景,结果图像也应该是白色背景
	blur(resultXline, resultXline,Size(3,3),Point(-1,-1));
	imshow("resultXline", resultXline);

	Mat temp2, resultYline;
	erode(source1GrayBinaryzation, temp2, Yline); //将二值化图像 通过 水平线 腐蚀
	dilate(temp2, resultYline, Yline); //将腐蚀后的二值化图像进行 垂直线 膨胀
	//morphologyEx(source1GrayBinaryzation,resultYline,MORPH_OPEN,Yline); // 开操作
	bitwise_not(resultYline, resultYline); //反转像素,原图像白色背景,结果图像也应该是白色背景
	blur(resultYline, resultYline, Size(3, 3), Point(-1, -1)); 
	imshow("resultYline", resultYline);

	waitKey(0);
	return 0;	
}

代码效果演示:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值