用形态学滤波器开启和闭合图像
开启和闭合滤波器的定义只与基本的腐蚀和膨胀运算有关。
开启和闭合滤波器常用于目标检测。闭合滤波器可把错误分裂成小碎片的物体连接起来,而开启滤波器可以移除图像噪声产生的斑点。
如果优先考虑过滤噪声,可以先开启后闭合,但会消除部分物体碎片。
原图
开启图像
开启图像是对图像先腐蚀后膨胀。
开启滤波器消除了背景中的几个小物体,所有小到不能容纳完整结构元素的物体都会被移除。
//开启图像(腐蚀+膨胀)
cv::Mat opened;
cv::morphologyEx(binary, opened, cv::MORPH_OPEN, cv::Mat());
cv::imshow("opened", opened);
函数签名
CV_EXPORTS_W 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() );
开启和闭合等滤波器共用同一个函数cv::morphologyEx
。
参数分别为:输入矩阵,输出矩阵,运算符(预定义常量),结构元素,原点坐标,迭代次数,后面默认即可。
闭合图像
闭合图像是对图像先膨胀后腐蚀。
闭合滤波器滤波后,白色前景小物体的空隙已经被填满,也会把邻近物体连接起来,所有小到不能容纳完整结构元素的空隙或间隙都会被闭合滤波器消除。
//闭合图像(膨胀+腐蚀)
cv::Mat closed;
cv::morphologyEx(binary, closed, cv::MORPH_CLOSE, cv::Mat());
cv::imshow("closed", closed);
函数同开启滤波器,运算符改为cv::MORPH_CLOSE
即可。
开启和闭合运算的基本性质
对同一副图像进行多次同样的开启运算无效,闭合也一样,事实上,第一次使用开启了滤波器时已经填充了空隙,这些运算是幂等的。