opencv4android常用变换(三)
这是opencv4android的第三篇,从这里开始就简单的写,要不我没有时间去学别的了!大家加油。
Laplace 算子
检测边缘的一种算法,是一个二阶导数就是Sobel的导数,可以这么理解,是边界轮廓更加清晰明显。
方法: Laplacian(grayMat,dstMat,-1,3,1,0,Core.BORDER_DEFAULT);
参数说明:原图像,目标图像,深度,内核大小,后三个为默认值。
代码:
Mat grayMat=new Mat();
Utils.bitmapToMat(mBitmap,rgbMat);
Imgproc.GaussianBlur(rgbMat,grayMat,new Size(3,3),0,0,Core.BORDER_DEFAULT);
Imgproc.cvtColor(grayMat,grayMat,Imgproc.COLOR_BGR2GRAY);
Imgproc.Laplacian(grayMat,dstMat,-1,3,1,0,Core.BORDER_DEFAULT);
Utils.matToBitmap(dstMat,dstBitmap);
dstImage.setImageBitmap(dstBitmap);
效果:
从效果图上来看,确实要比Sobel的边缘检测效果要好很多,能够很明显的看出帽子上羽毛的轮廓。
Canny 边缘检测
Canny 边缘检测算法 是 John F. Canny 于 1986年开发出来的一个多级边缘检测算法,也被很多人认为是边缘检测的 最优算法, 最优边缘检测的三个主要评价标准是:
- 低错误率: 标识出尽可能多的实际边缘,同时尽可能的减少噪声产生的误报。
- 高定位性: 标识出的边缘要与图像中的实际边缘尽可能接近。
- 最小响应: 图像中的边缘只能标识一次。
—引自opencv教程。
方法:Imgproc.Canny(grayMat,dstMat,n,3*n,3,true);
参数:灰度图像,目标图像,最低阈值,最高阈值,内核大小,不知道。
代码:
Mat grayMat=new Mat();
Utils.bitmapToMat(mBitmap,rgbMat);
Imgproc.cvtColor(rgbMat,grayMat,Imgproc.COLOR_BGR2GRAY);
Imgproc.GaussianBlur(grayMat,grayMat,new Size(3,3),0,0,Core.BORDER_DEFAULT);
Imgproc.Canny(grayMat,dstMat,n,3*n,3,true);
Utils.matToBitmap(dstMat,dstBitmap);
dstImage.setImageBitmap(dstBitmap