概念
在二阶微分的时候,最大变化处的值为零即边缘是零值,通过二阶导数计算,依据理论我们可以计算出图像二阶导数,提取边缘。
效果图对比
●源图像
●处理后图像
函数讲解
●函数原型
○c++
void Laplacian( InputArray src, OutputArray dst, int ddepth,
int ksize = 1, double scale = 1, double delta = 0,
int borderType = BORDER_DEFAULT )
○Android
void Laplacian(Mat src, Mat dst, int ddepth, int ksize, double scale, double delta, int borderType)
●参数解释
○src:源图像Mat对象
○dst:目标图像Mat对象
○ddepth:图像的深度,可以为-1、CV_16S、CV_32F、CV_64F
○ksize:卷积核的大小只能为奇数。
○scale:Double类型的,计算可选比例因子,默认值1 。
○delta:加到输出像素的值,默认为0 。
○borderType:边界类型,默认值BORDER_DEFAULT。
函数使用
●c++中
#include<opencv2/opencv.hpp>
using namespace cv;
int main() {
Mat src = imread("C:/Users/Administrator/Desktop/ic_test.jpg");//引入源图像
if (src.empty()) {
return -1;
}
imshow("src", src);//展示源图像
GaussianBlur(src,src,Size(3,3),0,0);//高斯模糊去除噪声
cvtColor(src, src, CV_BGR2GRAY);//将图像转换为灰度图像
imshow("gray", src);//展示灰度图像
Mat dst;
Laplacian(src,dst,-1,3);//laplace边缘提取
imshow("dst", dst);//展示最终结果
waitKey(0);
return 0;
}
●Android中
Bitmap bitmap = BitmapFactory.decodeResource(getResources(),R.mipmap.ic_relief);
Mat src = new Mat();
Mat dst = new Mat();
Utils.bitmapToMat(bitmap,src);//将Bitmap对象转换为Mat对象
Imgproc.GaussianBlur(src,src,new Size(3,3),0,0);//高斯模糊去噪
Imgproc.cvtColor(src,src,Imgproc.COLOR_RGBA2GRAY);//将图像转换为灰度图像
Imgproc.Laplacian(src,dst,-1,3);//Laplace边缘提取
Utils.matToBitmap(dst,bitmap);//将Mat对象转换为Bitmap对象