- 腐蚀,输出的像素值是结构元素覆盖下输入图像的最小像素值
输入图像彩色图像 imread
转换为灰度图像 – cvtColor
转换为二值图像 – adaptiveThreshold
定义结构元素
开操作 (腐蚀+膨胀)提取 水平与垂直线
#include
using namespace cv;
using namespace std;
Mat src;
Mat dst;
int main()
{
src = imread("D:/opencvSRC/font.jpg");
if (!src.data) {
printf("load image error!\n");
}
namedWindow("src", CV_WINDOW_AUTOSIZE);
imshow("src", src);
//灰度
Mat gray;
if (src.channels() == 3) {
cvtColor(src, gray, CV_BGR2GRAY);
}
else {
gray = src;
}
imshow("gray", gray);
//转换为二值图像
Mat dest;
adaptiveThreshold(~gray, dest, 255, ADAPTIVE_THRESH_MEAN_C, THRESH_BINARY, 15, -2);
imshow("dest", dest);
Mat lineHKernel = getStructuringElement(MORPH_RECT, Size(src.cols / 30, 1), Point(-1, -1));
Mat lineVKernel = getStructuringElement(MORPH_RECT, Size(1, src.cols / 30), Point(-1, -1));
Mat fontKernel = getStructuringElement(MORPH_RECT, Size(5, 5), Point(-1, -1));
//开操作
Mat lineH;
Mat lineV;
Mat font;
morphologyEx(dest, lineH, CV_MOP_OPEN, lineHKernel, Point(-1, -1));
morphologyEx(dest, lineV, CV_MOP_OPEN, lineVKernel, Point(-1, -1));
morphologyEx(dest, font, CV_MOP_OPEN, fontKernel, Point(-1, -1));
//erode(dest, lineH, lineHKernel);
//imshow("lineH", lineH);
//dilate(lineH, lineH, lineHKernel);
blur(font, font, Size(3, 3));
bitwise_not(lineH, lineH);
bitwise_not(lineV, lineV);
bitwise_not(font, font);
imshow("lineH", lineH);
imshow("lineV", lineV);
imshow("font", font);
waitKey(0);
return 0;
}