📜  收盘| C++中OpenCV的形态转换(1)

📅  最后修改于: 2023-12-03 14:54:47.250000             🧑  作者: Mango

收盘| C++中OpenCV的形态转换

简介

OpenCV 是一个跨平台的计算机视觉库,提供了丰富的图像处理和计算机视觉算法。其中,形态学转换是一种基本的图像处理方法之一,在OpenCV中也有相应的函数实现。

形态学转换可以处理二值化图像,通过对图像进行膨胀、腐蚀、开运算、闭运算等方式,改变图像的形状和结构,从而得到特定的图像信息和特征。

形态学转换函数

OpenCV提供了几个形态学转换函数:

  • 膨胀函数 dilate
  • 腐蚀函数 erode
  • 开运算函数 morphologyEx
  • 闭运算函数 morphologyEx
膨胀函数 dilate

膨胀是将二值化图像中的区域进行扩张,使区域面积增大的一种形态学转换方法。在图像中,膨胀可以用来连接物体、扩大物体面积等。

膨胀函数的参数有三个:输入图像、输出图像、膨胀的结构元素。

void cv::dilate(
    const cv::Mat& src,         // 输入图像
    cv::Mat& dst,               // 输出图像
    const cv::Mat& kernel,      // 膨胀结构元素
    cv::Point anchor = cv::Point(-1,-1), 
                                // 锚点位置,默认为结构元素的中心点
    int iterations = 1,         // 膨胀次数,默认1
    int borderType = cv::BORDER_CONSTANT,
                                // 边界处理方式,默认填充 0
    const cv::Scalar& borderValue = cv::morphologyDefaultBorderValue() 
)
腐蚀函数 erode

腐蚀是将二值化图像中的区域进行收缩,使区域面积减小的一种形态学转换方法。在图像中,腐蚀可以用来分离物体、消除噪点等。

腐蚀函数的参数与膨胀函数相同。

void cv::erode(
    const cv::Mat& src,         // 输入图像
    cv::Mat& dst,               // 输出图像
    const cv::Mat& kernel,      // 腐蚀结构元素
    cv::Point anchor = cv::Point(-1,-1), 
                                // 锚点位置,默认为结构元素的中心点
    int iterations = 1,         // 腐蚀次数,默认1
    int borderType = cv::BORDER_CONSTANT,
                                // 边界处理方式,默认填充 0
    const cv::Scalar& borderValue = cv::morphologyDefaultBorderValue() 
)
开运算函数 morphologyEx

开运算是一种先腐蚀后膨胀的形态学转换方法,可以消除小物体、填小洞、分离物体等。

开运算函数的参数与腐蚀函数、膨胀函数相同。

void cv::morphologyEx(
    const cv::Mat& src,         // 输入图像
    cv::Mat& dst,               // 输出图像
    int op,                     // 形态学操作类型,cv::MORPH_OPEN 表示开运算
    const cv::Mat& kernel,      // 结构元素
    cv::Point anchor = cv::Point(-1,-1), 
                                // 锚点位置,默认为结构元素的中心点
    int iterations = 1,         // 迭代次数,默认1
    int borderType = cv::BORDER_CONSTANT,
                                // 边界处理方式,默认填充 0
    const cv::Scalar& borderValue = cv::morphologyDefaultBorderValue() 
)
闭运算函数 morphologyEx

闭运算是一种先膨胀后腐蚀的形态学转换方法,可以填充小孔洞、连接物体等。

闭运算函数的参数与开运算函数相同。

void cv::morphologyEx(
    const cv::Mat& src,         // 输入图像
    cv::Mat& dst,               // 输出图像
    int op,                     // 形态学操作类型,cv::MORPH_CLOSE 表示闭运算
    const cv::Mat& kernel,      // 结构元素
    cv::Point anchor = cv::Point(-1,-1), 
                                // 锚点位置,默认为结构元素的中心点
    int iterations = 1,         // 迭代次数,默认1
    int borderType = cv::BORDER_CONSTANT,
                                // 边界处理方式,默认填充 0
    const cv::Scalar& borderValue = cv::morphologyDefaultBorderValue() 
)
结论

形态学转换对于二值化图像的处理非常有效,通过使用不同结构元素和不同的形态学操作,可以得到不同的处理效果。OpenCV提供了多个形态学转换函数,通过灵活应用,可以有效地处理各种类型的图像问题。