在二阶导数的时候,最大变化处的值为零即边缘是零值。通过二阶导数计算,依据此理论我们可以计算图像二阶导数,提取边缘。
二阶导数我不会? 拉普拉斯算子已实现,嘿嘿
代码
#include "../common/common.hpp"
void main(int argc, char** argv)
{
Mat src, dst1, gray, laplacian, dst2;
src = imread(getCVImagesPath("images/lena.png"), IMREAD_COLOR);
imshow("src", src);
GaussianBlur(src, dst1, Size(3, 3), 0, 0);//先模糊,为了去噪声
cvtColor(dst1, gray, CV_BGR2GRAY);
Laplacian(gray, laplacian, CV_16S, 3);//参数意思与上述的 Sobel Scharr 函数一致
convertScaleAbs(laplacian, laplacian);
imshow("laplacian", laplacian);
threshold(laplacian, dst2, 0, 255, THRESH_OTSU | THRESH_BINARY);//二值化,边缘显示的更清晰
imshow("dst2", dst2);
waitKey(0);
}
效果图