OpenCV基础课程笔记13提取水平竖直线

写在前面

一般提取水平竖直线都是相对于二值图像来说的,要先对原始图像二值化处理。

代码只跑找到竖线的算法(横线换一个结构体就行了)

代码

#include
#include
using namespace std;
using namespace cv;

int main() {
	Mat src = imread("A:\\专用\\TestForTheCV\\class13水平垂直线.jpg");
	imshow("图片", src);

	Mat gray_src;
	cvtColor(src, gray_src, CV_BGR2GRAY);

	Mat binary_src;
	adaptiveThreshold(gray_src, binary_src, 255, ADAPTIVE_THRESH_MEAN_C, THRESH_BINARY, 15, -2);


	//定义两个结构体,分别是横线和竖线
	Mat hline = getStructuringElement(MORPH_RECT, Size(src.cols / 16, 1), Point(-1, -1));
	Mat vline = getStructuringElement(MORPH_RECT, Size(1, src.rows/10), Point(-1, -1));

	//进行开操作
	Mat dst;
	erode(binary_src, dst, hline);
	dilate(dst, dst, hline);

	//直接开操作
	Mat dstt;
	morphologyEx(binary_src, dstt, CV_MOP_OPEN, vline);

	//为了好看,咱们将图像反色,然后做一下均值滤波,更圆滑
	bitwise_not(dstt, dstt);
	imshow("result", dstt);

	blur(dstt, dstt, Size(3, 3));
	imshow("result after bluring", dstt);



	waitKey(0);
	return 0;
}

结果

OpenCV基础课程笔记13提取水平竖直线_第1张图片
OpenCV基础课程笔记13提取水平竖直线_第2张图片

你可能感兴趣的:(opencv,计算机视觉)