-
环境配置 :OpenCV在xCode中的安装与环境配置
-
函数
均值平滑函数(均值滤波器)(
blur
)
所有像素加权系数相等。
- blur
函数解析
blur(InputArray src, // 输入图像
OutputArray dst, // 输出图像
Size ksize, // Size( w,h ): 定义内核大小( w 像素宽度, h 像素高度)
Point anchor = Point(-1,-1), // Point(-1, -1): 指定锚点位置(被平滑点), 如果是负值,取核的中心为锚点
int borderType = BORDER_DEFAULT); // 可省略不写
高斯平滑函数(高斯滤波器)(
GaussianBlur
)
中间像素的加权系数是最大的, 周边像素的加权系数随着它们远离中间像素的距离增大而逐渐减小。
- GaussianBlur
函数解析
GaussianBlur(InputArray src, // 输入图像
OutputArray dst, // 输出图像
Size ksize, // Size( w,h ): 定义内核大小( w 像素宽度, h 像素高度)
double sigmaX, // x 方向标准方差
double sigmaY = 0, // y 方向标准方差
int borderType = BORDER_DEFAULT)
中值平滑函数(中值滤波器)(
medianBlur
)
中值滤波将图像的每个像素用邻域 (以当前像素为中心的正方形区域)像素的中值代替。
- medianBlur
函数解析
medianBlur(InputArray src, // 输入图像
OutputArray dst, // 输出图像
int ksize) // 内核大小 (只需一个值,因为我们使用正方形窗口),必须为奇数。
-
代码实现
- 创建Button
- (void)createButton {
NSArray *arr = @[@"Original", @"Homogeneous", @"Gaussian", @"Median"];
CGFloat w = self.view.frame.size.width / 4;
CGFloat y = self.view.frame.size.height - 50;
for (NSInteger i = 0; i < 4; i++) {
UIButton *button = [UIButton buttonWithType:(UIButtonTypeSystem)];
button.frame = CGRectMake(w * i, y, w, 40);
[self.view addSubview:button];
button.backgroundColor = [UIColor lightGrayColor];
[button setTitle:arr[i] forState:(UIControlStateNormal)];
[button addTarget:self action:@selector(buttonClick:) forControlEvents:(UIControlEventTouchUpInside)];
button.titleLabel.font = [UIFont systemFontOfSize:11];
button.tag = 1000 + i;
}
}
- Button Click
- (void)buttonClick:(UIButton *)button {
NSInteger tag = button.tag;
switch (tag) {
case 1000: {
_imageView1.image = MatToUIImage(src);
} break;
// 均值
case 1001: {
for (int i = 1; i < MAX_KERNEL_LENGTH; i += 2) {
blur(src, dst, cv::Size(i, i));
}
_imageView1.image = MatToUIImage(dst);
} break;
// 高斯
case 1002: {
for (int i = 1; i < MAX_KERNEL_LENGTH; i += 2) {
GaussianBlur(src, dst, cv::Size(i, i), 0);
}
_imageView1.image = MatToUIImage(dst);
} break;
// 中值
case 1003: {
for (int i = 1; i < MAX_KERNEL_LENGTH; i += 2) {
medianBlur(src, dst, i);
}
_imageView1.image = MatToUIImage(dst);
} break;
}
}
- 全局变量
int MAX_KERNEL_LENGTH = 20;
Mat src, dst;
-
效果
效果图(*原图--均值--高斯--中值*)
-
参考资料 :图像平滑处理
网友评论