1. 理论
在二阶导数的时候,最大变化处的值为零即边缘是零值。通过二阶
导数计算,依据此理论我们可以计算图像二阶导数,提取边缘。
2. Laplance算子
- 用Laplance算子对图像进行二阶求导
- Opencv已经提供了相关API - cv::Laplance
3. 处理流程
- 高斯模糊 – 去噪声GaussianBlur()
- 转换为灰度图像cvtColor()
- 拉普拉斯 – 二阶导数计算Laplacian()
- 取绝对值convertScaleAbs()
- 二值化threshold()
4. Laplacian() API
对图像进行Laplance算子运算。
Laplacian(
InputArray src,
OutputArray dst,
int depth, //深度CV_16S
int kisze, // 3
double scale = 1,
double delta =0.0,
int borderType = 4
)
5. 例程
#include<opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
int main() {
Mat src, dst;
src = imread("D:/resource/images/face.jpg");
if (!src.data)
{
printf("the image could not be loaded...");
waitKey(0);
return -1;
}
imshow("input image", src);
Mat blur_image;
GaussianBlur(src, blur_image, Size(3, 3), 0, 0);
Mat gray_image;
cvtColor(blur_image, gray_image, COLOR_BGR2GRAY);
Laplacian(gray_image, dst, -1);
convertScaleAbs(dst, dst);
threshold(dst, dst, 0, 255, THRESH_OTSU | THRESH_BINARY);
imshow("output image", dst);
waitKey(0);
return 0;
}