• OpenCV(三十一):形态学操作


    ​​​​​​1.形态学操作

           OpenCV 提供了丰富的函数来进行形态学操作,包括腐蚀、膨胀、开运算、闭运算等。下面介绍一些常用的 OpenCV 形态学操作函数:

    1. 腐蚀操作(Erosion): erode(src, dst, kernel, anchor, iterations, borderType, borderValue) 该函数对输入图像中的前景区域进行腐蚀操作,通过用结构元素中的最小值替换区域中的像素值来收缩前景区域。

    2. 膨胀操作(Dilation): dilate(src, dst, kernel, anchor, iterations, borderType, borderValue) 该函数对输入图像中的前景区域进行膨胀操作,通过用结构元素中的最大值替换区域中的像素值来扩展前景区域。

    3. 开运算(Opening): morphologyEx(src, dst, MORPH_OPEN, kernel, anchor, iterations, borderType, borderValue) 开运算是先对图像进行腐蚀操作,然后再进行膨胀操作。这个操作可以去除小的噪声,并平滑图像的边界。

    4. 闭运算(Closing): morphologyEx(src, dst, MORPH_CLOSE, kernel, anchor, iterations, borderType, borderValue) 闭运算是先对图像进行膨胀操作,然后再进行腐蚀操作。这个操作可以填充小的空洞,并平滑图像的边界。

    5. 梯度运算(Gradient): morphologyEx(src, dst, MORPH_GRADIENT, kernel, anchor, iterations, borderType, borderValue) 梯度运算可以通过对输入图像的膨胀和腐蚀结果之差来突出显示边缘。

    6. 顶帽运算(Top Hat): morphologyEx(src, dst, MORPH_TOPHAT, kernel, anchor, iterations, borderType, borderValue) 顶帽运算可以通过对输入图像和开运算结果之差来突出显示边缘和细节。

    7. 黑帽运算(Black Hat): morphologyEx(src, dst, MORPH_BLACKHAT, kernel, anchor, iterations, borderType, borderValue) 黑帽运算可以通过对闭运算结果和输入图像之差来突出显示边缘和细节。

    以上函数中,src 是输入图像,dst 是输出图像,kernel 是结构元素,anchor 是结构元素的锚点位置,iterations 是迭代次数,borderType 是边界像素处理方式,borderValue 是边界像素的值。

    2.相关函数morphologyEx()

    morphologyEx() 是 OpenCV 库中用于形态学操作的函数之一。它可以执行包括腐蚀、膨胀、开运算、闭运算等一系列形态学操作。该函数的原型如下:

    void morphologyEx(

    InputArray src,

    OutputArray dst,

    int op,

    InputArray kernel,

    Point anchor = Point(-1,-1),

    int iterations = 1,

    int borderType = BORDER_CONSTANT,

    const Scalar& borderValue = morphologyDefaultBorderValue()

    );

    该函数的参数包括:

    • src:输入图像或图像数组。

    • dst:输出图像或图像数组。

    • op:指定形态学操作的类型。

    • kernel:结构元素(核)用于形态学操作。

    • anchor:结构元素中心的位置,默认为(-1, -1)表示结构元素的中心位置为核的中心。

    • iterations:执行形态学操作的迭代次数,默认为1。

    • borderType:边界像素处理方式,默认为BORDER_CONSTANT。

    • borderValue:当borderType为BORDER_CONSTANT时指定边界像素的值,默认为morphologyDefaultBorderValue()。

    其中形态学操作的类型:

    3.示例代码:

    1. void image_morphologyEx(Mat image){
    2. Mat gray;
    3. cvtColor(image,gray,COLOR_BGR2GRAY);//灰度化
    4. threshold(gray,gray,80,255,THRESH_BINARY);
    5. //5×5矩阵结构元素
    6. Mat kernel= getStructuringElement(0,Size(5,5));
    7. Mat open,close,gradient,tophat,blackhat;
    8. //对图像进行开运算
    9. morphologyEx(gray,open,MORPH_OPEN,kernel);
    10. //对图像进行闭运算
    11. morphologyEx(gray,close,MORPH_CLOSE,kernel);
    12. //对图像进行梯度运算
    13. morphologyEx(gray,gradient,MORPH_GRADIENT,kernel);
    14. //对图像进行顶帽运算
    15. morphologyEx(gray,tophat,MORPH_TOPHAT,kernel);
    16. //对图像进行黑帽运算
    17. morphologyEx(gray,blackhat,MORPH_BLACKHAT,kernel);
    18. }

  • 相关阅读:
    三级分类的数据表设计和构造API数据
    MySQL要不要容器化?能不能运行在Docker?
    MySQL事务(transaction) (有这篇就足够了..)
    [原创]基于Comsol的方形、三角形、椭圆形克拉尼板仿真研究
    Golang 常用的开源库和学习资源有哪些
    leetcode: 322. 零钱兑换-dp
    数据分析:单元2 NumPy数据存取与函数
    软件工程中如何设计测试用例
    力扣:67.二进制求和
    2017年亚太杯APMCM数学建模大赛B题喷雾轨迹规划问题求解全过程文档及程序
  • 原文地址:https://blog.csdn.net/weixin_63357306/article/details/132763956