转载请说明出处!
作者:kqw攻城狮
出处:个人站 | CSDN
效果图
源码
Sobel滤波器也叫Sobel算子,与Canny边缘检测一样,需要计算像素的灰度梯度,只不过是换用另一种方式。
使用Sobel算子计算边缘的步骤
将图像转为灰度图像
12// 原图置灰Imgproc.cvtColor(src, grayMat, Imgproc.COLOR_BGR2GRAY);计算水平方向灰度梯度的绝对值
12Imgproc.Sobel(grayMat, grad_x, CvType.CV_16S, 1, 0, 3, 1, 0);Core.convertScaleAbs(grad_x, abs_grad_x);计算垂直方法灰度梯度的绝对值
12Imgproc.Sobel(grayMat, grad_y, CvType.CV_16S, 0, 1, 3, 1, 0);Core.convertScaleAbs(grad_y, abs_grad_y);计算最终梯度
12// 计算结果梯度Core.addWeighted(abs_grad_x, 0.5, abs_grad_y, 0.5, 1, sobel);
最终的梯度实质上就是边缘。
这里用到了两个3 * 3
的核对图像做卷积来近似地计算水平和垂直方向的灰度梯度
封装
这里用到了RxJava。主要是因为图片处理是耗时操作,会阻塞线程,为了防止界面卡顿,这里使用RxJava进行了线程切换。
|
|
使用
|
|