OpenCV--膨張と収縮

書式#include <opencv2 /コア/ core.hpp> 
の#include <opencv2 / imgproc / imgproc.hpp> 
の#include <opencv2 /のHighGUI / highgui.hpp> 
の#include <opencv2 / opencv.hpp> 
の#include <iostreamの> 使用して名前空間CV ;
 使用して名前空間はstd; // グローバル変数の宣言******************************** マットg_srcImage、g_dstImage;
 int型 g_nTrackbarNumber = 0 ; // 0 1拡張拡張表し、腐食侵食表すINT g_nKernelSize =を3。 ; // 核のサイズ// グローバル関数宣言*********************** ********* 無効 on_TrackbarNumberChange(

  







                      
int, void *);//回调函数
void on_KernelSizeChange(int, void *);//回调函数
void Process();

int main()
{
    //载入原始图片
    g_srcImage = imread("E:\\VS2015Opencv\\vs2015\\project\\picture\\cat.jpg");
    if (!g_srcImage.data) { printf("读取srcImage错误~! \n"); return false; }
    //显示原始图片
    namedWindow("image[origin]");
    imshow("image[origin]", g_srcImage);
    //腐蚀/膨胀操作
    namedWindow("image[morphology]");
    createTrackbar("erode/dilate: ", "image[morphology]", &g_nTrackbarNumber, 1, on_TrackbarNumberChange);
    createTrackbar("kernel size: ", "image[morphology]", &g_nKernelSize, 21, on_KernelSizeChange);
    on_TrackbarNumberChange(g_nTrackbarNumber, 0);
    on_KernelSizeChange(g_nKernelSize, 0);
    waitKey();
    return 0;
}

void Process()
{
    Mat element = getStructuringElement(MORPH_RECT, Size(g_nKernelSize * 2 + 1, g_nKernelSize * 2 + 1), Point(g_nKernelSize, g_nKernelSize));
    if (g_nTrackbarNumber == 0)
        erode(g_srcImage, g_dstImage, element);
    else
        dilate(g_srcImage, g_dstImage, element);
    imshow("image[morphology]", g_dstImage);
}
//回调函数
void on_TrackbarNumberChange(int, void *)
{
    Process();
}

void on_KernelSizeChange(int, void *)
{
    Process();
}

腐蚀和膨胀是针对白色部分(高亮部分而言)。从数学角度来说,膨胀或者腐蚀操作就是将图像(或图像的一部分区域,称之为A)与核(称之为B)进行卷积。
膨胀就是求局部最大值操作,即计算核B覆盖的区域的像素点的最大值,并把这个最大值赋值给参考点指定的像素,这样就会使图像中的高亮区域逐渐增长。
腐蚀就是求局部最小值操作,即计算核B覆盖的区域的像素点的最小值,并把这个最小值赋值给参考点指定的像素,这样就会使图像中的高亮区域逐渐减少。
可参考博文:https://blog.csdn.net/qq_36387683/article/details/80479793

おすすめ

転載: www.cnblogs.com/fcfc940503/p/11279031.html