📅  最后修改于: 2023-12-03 14:54:47.250000             🧑  作者: Mango
OpenCV 是一个跨平台的计算机视觉库,提供了丰富的图像处理和计算机视觉算法。其中,形态学转换是一种基本的图像处理方法之一,在OpenCV中也有相应的函数实现。
形态学转换可以处理二值化图像,通过对图像进行膨胀、腐蚀、开运算、闭运算等方式,改变图像的形状和结构,从而得到特定的图像信息和特征。
OpenCV提供了几个形态学转换函数:
膨胀是将二值化图像中的区域进行扩张,使区域面积增大的一种形态学转换方法。在图像中,膨胀可以用来连接物体、扩大物体面积等。
膨胀函数的参数有三个:输入图像、输出图像、膨胀的结构元素。
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()
)
腐蚀是将二值化图像中的区域进行收缩,使区域面积减小的一种形态学转换方法。在图像中,腐蚀可以用来分离物体、消除噪点等。
腐蚀函数的参数与膨胀函数相同。
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()
)
开运算是一种先腐蚀后膨胀的形态学转换方法,可以消除小物体、填小洞、分离物体等。
开运算函数的参数与腐蚀函数、膨胀函数相同。
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()
)
闭运算是一种先膨胀后腐蚀的形态学转换方法,可以填充小孔洞、连接物体等。
闭运算函数的参数与开运算函数相同。
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提供了多个形态学转换函数,通过灵活应用,可以有效地处理各种类型的图像问题。