-
环境配置 :OpenCV在xCode中的安装与环境配置
-
处理效果
-
函数介绍(
erode
anddilate
)腐蚀与膨胀
- Erosion
erode(InputArray src, // 原图像
OutputArray dst, // 输出图像
// 腐蚀操作的内核。 如果不指定,默认为一个简单的 3x3 矩阵。
// 否则,我们就要明确指定它的形状,可以使用函数 getStructuringElement:
InputArray kernel,
Point anchor = Point(-1,-1), int iterations = 1,
int borderType = BORDER_CONSTANT,
const Scalar& borderValue = morphologyDefaultBorderValue())- dilate (参数用途同上)
dilate( InputArray src,
OutputArray dst,
InputArray kernel,
Point anchor = Point(-1,-1),
int iterations = 1,
int borderType = BORDER_CONSTANT,
const Scalar& borderValue = morphologyDefaultBorderValue() )- getStructuringElement
// 这里 shap 是内核形状,ksize 是内核大小,anchor 是锚点位置
Mat getStructuringElement(int shape,
Size ksize,
Point anchor = Point(-1,-1))
- shap 有三种形状
- 矩形:
MORPH_RECT
- 交叉形:
MORPH_CROSS
- 椭圆形:
MORPH_ELLIPSE
- 矩形:
-
iOS实现代码片段(源码 )
腐蚀
- (void)erosion {
/// 记录所选的内核形状
int erosion_type;
/// dilation_elem 全局变量 int 型,用来控制选择的内核形状
if(dilation_elem == 0) {
erosion_type = MORPH_RECT; // 矩形
} else if(dilation_elem == 1) {
erosion_type = MORPH_CROSS; // 十字
} else if(dilation_elem == 2) {
erosion_type = MORPH_ELLIPSE; // 圆形
}
/// 指定内核 erosion_size 全局变量 我这里用的是 Slider.value 来控制 erosion_size 的
Mat element = getStructuringElement(erosion_type,
cv::Size(2 * erosion_size + 1, 2 * erosion_size + 1),
cv::Point(erosion_size, erosion_size));
/// 腐蚀操作
erode(src2, erosion_dst, element);
/// 图像转换 显示到 UIImageView 上
_imgView2.image = MatToUIImage(erosion_dst);
}
膨胀
- (void)dilation {
int erosion_type;
if(dilation_elem == 0) {
erosion_type = MORPH_RECT;
} else if(dilation_elem == 1) {
erosion_type = MORPH_CROSS;
} else if(dilation_elem == 2) {
erosion_type = MORPH_ELLIPSE;
}
Mat element = getStructuringElement(dilation_type,
cv::Size(2 * dilation_size + 1, 2 * dilation_size + 1),
cv::Point(dilation_size, dilation_size));
/// 膨胀操作
dilate(src2, dilation_dst, element);
_imgView2.image = MatToUIImage(dilation_dst);
}
-
最终效果