-
環(huán)境配置 :OpenCV在xCode中的安裝與環(huán)境配置
-
處理效果
-
函數(shù)介紹(
erode
anddilate
)腐蝕與膨脹
- Erosion
erode(InputArray src, // 原圖像
OutputArray dst, // 輸出圖像
// 腐蝕操作的內(nèi)核。 如果不指定仔涩,默認(rèn)為一個(gè)簡(jiǎn)單的 3x3 矩陣。
// 否則,我們就要明確指定它的形狀均澳,可以使用函數(shù) getStructuringElement:
InputArray kernel,
Point anchor = Point(-1,-1), int iterations = 1,
int borderType = BORDER_CONSTANT,
const Scalar& borderValue = morphologyDefaultBorderValue())- dilate (參數(shù)用途同上)
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 是內(nèi)核形狀翎卓,ksize 是內(nèi)核大小,anchor 是錨點(diǎn)位置
Mat getStructuringElement(int shape,
Size ksize,
Point anchor = Point(-1,-1))
- shap 有三種形狀
- 矩形:
MORPH_RECT
- 交叉形:
MORPH_CROSS
- 橢圓形:
MORPH_ELLIPSE
- 矩形:
-
iOS實(shí)現(xiàn)代碼片段(源碼 )
腐蝕
- (void)erosion {
/// 記錄所選的內(nèi)核形狀
int erosion_type;
/// dilation_elem 全局變量 int 型伴挚,用來控制選擇的內(nèi)核形狀
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; // 圓形
}
/// 指定內(nèi)核 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);
/// 圖像轉(zhuǎn)換 顯示到 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);
}
-
最終效果