sobel(iOS)算子(边缘检测)

最全OpenCV教程及图像处理、目标跟踪、识别案例

基本概念

sobel算子是一个主要用于边缘检测的离散微分算子。他结合了高斯平滑和微分求导,用来计算图像灰度函数的近似梯度,在图像的任何一点使用此算子,都会产生对应的梯度矢量或者是其他矢量。

sobel算子的计算过程


sobel算子函数:sobel()函数

void Sobel( InputArray src, // 输入图像。Mat类即可

                    OutputArray dst,// 目标图像,函数输出参数,需要和源图片有一样的尺寸和类型

                    int ddepth,// 输出图像的深度,比如src.depth(),和dddepth的组合

                    int dx, 、// x方向的差分阶数

                    int dy, // y方向的差分阶数

                    int ksize = 3,// 有默认值3,表示sobel核的大小,必须取1,3,5,7

                    double scale = 1,// 计算导数值可选的缩放因子,默认值是1,表示默认情况下是没有应用缩放的

                    double delta = 0,// 表示在结果存入目标图(第二个参数dst)之前可选的值belda,有默认值为0

                    int borderType = BORDER_DEFAULT );  //边界模式

参数详解




代码实现

NSString *image = @"try.png";

UIImage *image1 = [UIImage imageNamed:image];

Mat im;

UIImageToMat(image1, im);

if (im.empty()) {

return;

}

// 创建X,Y方向梯度图像的变量

Mat grad_x,grad_y;

// 梯度的绝对值

Mat abs_grad_x,abs_grad_y;

// 转换为灰度图像

cvtColor(im, src, COLOR_RGBA2GRAY);

// 求x方向的梯度

Sobel(src, grad_x, CV_16S, 1, 0);

convertScaleAbs(grad_x, abs_grad_x);

// 求y方向的梯度

Sobel(src, grad_y, CV_16S, 0, 1);

convertScaleAbs(grad_y, abs_grad_y);

// 合并梯度

addWeighted(abs_grad_x, 0.5, abs_grad_y, 0.5, 0, dst);

self.secondImageView.image = MatToUIImage(dst);

其中函数convertScaleAbs() ,使用线性变换转换输入数组元素成8位无符号整数


展示效果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值