可以通过形态学处理,使其变得丰满,或者去除掉多余的像素。
结构元素可以简单定义为:像素的组合(如下图)
在形态学中,通常使用二值图像作为输入图像。在二值图像中,习惯用黑色(低像素值)表示背景物体,白色(高像素值)表示前景物体。
是取核中(即上面的3x3矩阵中)像素值的最大值代替锚点位置的像素值,这样会使图像中较亮的区域增大,较暗的区域减小。如果是一张黑底,白色前景的二值图,就会使白色的前景物体颜色面积变大,就像膨胀了一样。
Mat dialated; //目标图像 dilate(image, dialated, Mat(),Point(-1,-1),5); imshow("dialated", dialated);
腐蚀操作类似于中值平滑,也有一个核,但不进行卷积运算,而是取核中像素值的最小值代替锚点位置的像素值,这样就会使图像中较暗的区域面积增大,较亮的的区域面积减小。如果是一张黑底,白色前景的二值图,就会使白色的前景物体颜色变小,就像被腐蚀了一样。
Mat eroded;//目标图像 Mat element(4, 4,CV_8U);//核大小 erode(image, eroded, Mat()); imshow("eroded", eroded);
先进行腐蚀操作,后进行膨胀操作,主要用来去除一些较亮的部分,即先腐蚀掉不要的部分,再进行膨胀。
Mat opened; morphologyEx(image, opened, MORPH_OPEN, Mat()); imshow("opened", opened);
先进行膨胀操作,后进行腐蚀操作,主要用来去除一些较暗的部分。
Mat closed; morphologyEx(image, closed, MORPH_CLOSE, element, Point(-1, -1), 5); imshow("closed", closed);
膨胀运算结果减去腐蚀运算结果,可以拿到轮廓信息。
Mat result; morphologyEx(image, result, MORPH_GRADIENT, Mat(),Point(-1,-1),5); imshow("result", result);
原始图像减去开运算结果
即:原始带刺的-不带刺的=刺
Mat tophat; morphologyEx(image,tophat, MORPH_TOPHAT, Mat()); imshow("tophat", tophat);
原始输入-闭运算结果
Mat blackhat; morphologyEx(image, blackhat, MORPH_BLACKHAT, Mat()); imshow("blackhat", blackhat);
提取出文字下划线
void QuickDemo::pengzhanglianxi_demo(Mat& image) { imshow("image", image); Mat img,img_thr,kernel,dst; cvtColor(image, img, COLOR_RGB2GRAY); threshold(img, img_thr, 127, 255, THRESH_BINARY); kernel = getStructuringElement(MORPH_RECT, Size(30, 1)); //ksize – Size of the structuring element. //cols – Width of the structuring element //rows – Height of the structuring element dilate(img_thr, dst, kernel); imshow("img_thr", img_thr); imshow("dst", dst); }
原文:https://www.cnblogs.com/hongweijiang/p/14876507.html