用腐蚀及膨胀来进行边界提取

腐蚀:高亮部分减少

膨胀:高亮部分增加

边界提取 = 膨胀-腐蚀

#include "opencv2/core/core.hpp"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"

using namespace cv;


int main(int argc, char *argv[])
{
    Mat image, imageGray, imageDilate, imageErode, imageBorder;
    image = imread("C:\\vs_test\\Project7\\x64\\Debug\\1.png");
    resize(image, image, Size(400, 400));
    cvtColor(image, imageGray, CV_RGB2GRAY);

    // 这里矩形MORPH_RECT=0, 十字形MORPH_CROSS=1, 椭圆MORPH_ELLIPSE=2 
    //getStructuringElement是获得卷积核(形状,大小,核的中心位置默认位于形状中心)
    Mat element = getStructuringElement(1, Size(3, 3), Point(-1, -1));
    dilate(imageGray, imageDilate, element, Point(-1, -1));//膨胀
    erode(imageGray, imageErode, element, Point(-1, -1));  //腐蚀
    imageBorder = imageDilate - imageErode;                //边界提取
    imshow("Source image", image);
    imshow("Dilate", imageDilate);
    imshow("Erode", imageErode);
    imshow("Border", imageBorder);
    waitKey();
}

运行结果:

 

posted @ 2019-06-19 10:47  一颗蘋果  阅读(1202)  评论(0编辑  收藏  举报