IOSiOS Developer

OpenCV for iOS 学习笔记(八)—— 腐蚀与膨胀(E

2016-10-21  本文已影响396人  FLNuo


膨胀效果
  • 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))

腐蚀
- (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);
}

腐蚀与膨胀效果展示
上一篇 下一篇

猜你喜欢

热点阅读