两种算子均可以用于提取图像的边缘。
#include <opencv2/opencv.hpp>
#include <iostream>
#include <opencv2/core/utils/logger.hpp>
using namespace std;
using namespace cv;
int main(int argc, const char* argv[])
{
utils::logging::setLogLevel(utils::logging::LOG_LEVEL_SILENT); //设置日志输出
Mat dst, src_gray, result, resultx, resulty;
Mat src = imread("E:/picture/8.jpg");
putText(src, "OpenCv_vigny", Point(50, 50), FONT_HERSHEY_COMPLEX, 1.0,
Scalar(12, 12, 127), 1, LINE_8, false);
GaussianBlur(src, dst, Size(3, 3), 0, 0, BORDER_DEFAULT);
cvtColor(dst, src_gray, COLOR_BGR2GRAY);
//Sobel算子x方向,y方向
Sobel(src_gray, resultx, CV_16S, 1, 0, 3);
Sobel(src_gray, resulty, CV_16S, 0, 1, 3);
//Laplance算子
//Laplacian(src_gray, resultx, CV_16S, 3, 1.0, 0, BORDER_DEFAULT);
//
//对计算结果取绝对值
convertScaleAbs(resultx, resultx);
convertScaleAbs(resulty, resulty);
//Sobel算子x和y加权相加
addWeighted(resultx, 0.5, resulty, 0.5, 0, result);
imshow("input", src);
imshow("output", result);
waitKey(0);
destroyAllWindows();
return 0;
}