opencv学习(十)提取水平线与垂直线

1.提取水平线与垂直线

操作过程:

  • 读取原图;
  • 转为灰度图像;
  • 转为二值图像;
  • 定义结构元素;
  • 开操作。

实例代码:

#include <opencv2/opencv.hpp>
#include <iostream>

using namespace std;
using namespace cv;

int main()
{
	Mat src, grayImg,binImg,dst;
	src = imread("C:\\Users\\liuhuimin\\Desktop\\ll.png");
	if (!src.data) {
		printf("cloud not load image");
		return -1;
	}
	namedWindow("原图", CV_WINDOW_AUTOSIZE);
	imshow("原图", src);

	cvtColor(src, grayImg, CV_RGB2GRAY);
	namedWindow("灰度图", CV_WINDOW_AUTOSIZE);
	imshow("灰度图", grayImg);

	adaptiveThreshold(~grayImg, binImg, 255, ADAPTIVE_THRESH_MEAN_C, THRESH_BINARY, 15, -2);
	namedWindow("二值图", CV_WINDOW_AUTOSIZE);
	imshow("二值图", binImg);

     Mat hline = getStructuringElement(MORPH_RECT, Size(src.cols/16, 1));
     Mat vline = getStructuringElement(MORPH_RECT, Size(1, src.rows/16));
	 morphologyEx(binImg, dst, MORPH_OPEN,vline );

	namedWindow("最后结果", CV_WINDOW_AUTOSIZE);
	imshow("最后结果", dst);
	waitKey(0);
    return 0;
}

效果图:

2.提取字母 

实例代码:

#include <opencv2/opencv.hpp>
#include <iostream>

using namespace std;
using namespace cv;

int main() 
{
	Mat src, grayImg, binImg, dest;
	
	src = imread("C:\\Users\\liuhuimin\\Desktop\\mm.png");
	if (!src.data) 
	{
		cout << "图片打开失败!" << endl;
		return -1;
	}
	namedWindow("原图像", CV_WINDOW_AUTOSIZE);
	imshow("原图像", src);

	cvtColor(src, grayImg, CV_RGB2GRAY);
	namedWindow("灰度图", CV_WINDOW_AUTOSIZE);
	imshow("灰度图", grayImg);
	
	adaptiveThreshold(~grayImg, binImg, 255, ADAPTIVE_THRESH_MEAN_C, THRESH_BINARY, 15, -2);
	namedWindow("二值图像", CV_WINDOW_AUTOSIZE);
	imshow("二值图像", binImg);

	Mat kernel = getStructuringElement(MORPH_RECT, Size(3, 3));
	morphologyEx(binImg, dest, MORPH_OPEN, kernel);
	namedWindow("最终结果", CV_WINDOW_AUTOSIZE);
	imshow("最终结果", ~dest);
	waitKey(0);
	return 0;
}

效果图:

猜你喜欢

转载自blog.csdn.net/lhm_19960601/article/details/82626694