【opencv学习之二十五】OpenCV腐蚀、膨胀、开闭运算、形态学梯度、顶帽、黑帽

opencv有一些基本的形态学运算,对图像做初步处理,用来突出需要分割或进一步处理的图像;算子具体的原理就不做解释了,直接上代码看应用场景,代码里有注解:

void imgMorph()//图像形态学操作
{
    Mat srcImg = imread("D:/ImageTest/Rice.png");
    Mat dstImg1,dstImg2,dstImg3,dstImg4,dstImg5,dstImg6,dstImg7;
    imshow("src", srcImg);
    cv::cvtColor(srcImg,srcImg,COLOR_RGB2GRAY);//进行,灰度处理
    threshold(srcImg,srcImg, 127, 255, THRESH_BINARY);
    Mat element = getStructuringElement( //定义kernel(获取结构元素)
                                         MORPH_RECT,//MORPH_RECT,矩形;MORPH_CROSS,交叉形;MORPH_ELLIPSE,椭圆形
                                         Size(3, 3)//内核尺寸
                                         );
    erode(srcImg, dstImg1, element, Point(-1, -1), 1);//腐蚀,将高亮部分腐蚀
    dilate(srcImg,dstImg2,element,Point(-1, -1),1);     //膨胀,将高亮部分膨胀
    morphologyEx(srcImg, dstImg3, MORPH_OPEN, element);  //开运算,先腐蚀在膨胀,消除小亮点,分离
    morphologyEx(srcImg, dstImg4, MORPH_CLOSE, element);  //闭运算,先膨胀再腐蚀,消除小黑点
    morphologyEx(srcImg, dstImg5, MORPH_GRADIENT, element);  //形态学梯度运算,膨胀图与腐蚀图之差,凸显团块边缘
    morphologyEx(srcImg, dstImg6, MORPH_TOPHAT, element);  //顶帽运算,闭运算与源图像之差,分离临近亮块
    morphologyEx(srcImg, dstImg7, MORPH_BLACKHAT, element);  //黒帽运算,开运算与源图像之差,分离临近暗块

    imshow("erode dst1", dstImg1);
    imshow("dilate dst2", dstImg2);
    imshow("OPEN dst3", dstImg3);
    imshow("CLOSE dst4", dstImg4);
    imshow("GRADIENT dst5", dstImg5);
    imshow("TOPHAT dst6", dstImg6);
    imshow("BLACKHAT dst7", dstImg7);
    waitKey(0);
}
效果:

【opencv学习之二十五】OpenCV腐蚀、膨胀、开闭运算、形态学梯度、顶帽、黑帽_第1张图片

你可能感兴趣的:(opencv)