提取水平和垂直线,就是应用之前学的开 和关的操作来实现。
具体知识点,看这个博客:https://blog.csdn.net/qq_25343557/article/details/78691828
================================================
下面是实现提取竖直线
=============================================
1 #include<iostream> 2 #include<opencv.hpp> 3 4 using namespace std; 5 using namespace cv; 6 void GetLine(); 7 int main() 8 { 9 GetLine(); 10 11 12 waitKey(0); 13 return 1; 14 } 15 void GetLine() { 16 Mat src, grayImg, binImg, dest; 17 //①、读取图片 18 src = imread("C:\\Users\\32829\\Desktop\\qq.png"); 19 if (!src.data) { 20 cout << "图片打开失败!" << endl; 21 return; 22 } 23 namedWindow("原图像", CV_WINDOW_AUTOSIZE); 24 imshow("原图像", src); 25 //②、转为灰度图 26 cvtColor(src, grayImg, CV_RGB2GRAY); 27 namedWindow("灰度图", CV_WINDOW_AUTOSIZE); 28 imshow("灰度图", grayImg); 29 //③、转为二值图像 30 adaptiveThreshold(~grayImg, binImg, 255, ADAPTIVE_THRESH_MEAN_C, THRESH_BINARY, 15, -2); 31 namedWindow("二值图像", CV_WINDOW_AUTOSIZE); 32 imshow("二值图像", binImg); 33 //④、定义结构元素 34 Mat kernel = getStructuringElement(MORPH_RECT, Size(1, 20)); 35 //⑤、开操作 36 morphologyEx(binImg, dest, MORPH_OPEN, kernel); 37 namedWindow("最终结果", CV_WINDOW_AUTOSIZE); 38 imshow("最终结果", ~dest); 39 40 cvWaitKey(); 41 }
最后结果展示:
=========================================================
=========================================
要是获得横线,就直接修改Size里面的值就行,比如变为(20,1),我理解的kernel就是每次从上到下,从左到右移动的小的元素值,那么这个Size就是限定你移动的小的元素值的形状和大小。
========================================
1 #include<iostream> 2 #include<opencv.hpp> 3 4 using namespace std; 5 using namespace cv; 6 void GetLine(); 7 int main() 8 { 9 GetLine(); 10 11 12 waitKey(0); 13 return 1; 14 } 15 void GetLine() { 16 Mat src, grayImg, binImg, dest; 17 //①、读取图片 18 src = imread("C:\\Users\\32829\\Desktop\\qq.png"); 19 if (!src.data) { 20 cout << "图片打开失败!" << endl; 21 return; 22 } 23 namedWindow("原图像", CV_WINDOW_AUTOSIZE); 24 imshow("原图像", src); 25 //②、转为灰度图 26 cvtColor(src, grayImg, CV_RGB2GRAY); 27 namedWindow("灰度图", CV_WINDOW_AUTOSIZE); 28 imshow("灰度图", grayImg); 29 //③、转为二值图像 30 adaptiveThreshold(~grayImg, binImg, 255, ADAPTIVE_THRESH_MEAN_C, THRESH_BINARY, 15, -2); 31 namedWindow("二值图像", CV_WINDOW_AUTOSIZE); 32 imshow("二值图像", binImg); 33 //④、定义结构元素 34 Mat kernel = getStructuringElement(MORPH_RECT, Size(20, 1)); 35 //⑤、开操作 36 morphologyEx(binImg, dest, MORPH_OPEN, kernel); 37 namedWindow("最终结果", CV_WINDOW_AUTOSIZE); 38 imshow("最终结果", ~dest); 39 40 cvWaitKey(); 41 }
=================================================================
下面是结果展示:
===========================================================