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;
}
效果图: