cv::Mat inputIMG = cv::imread("./input/src.jpg", 1);
cv::Mat graySrc, grad_x, grad_y;
cv::Mat abs_grad_x, abs_grad_y;
cv::cvtColor(inputIMG, graySrc, cv::COLOR_BGR2GRAY);
cv::GaussianBlur(graySrc, graySrc, cv::Size(3, 3), 0, 0, 4);
// 计算x方向的梯度
Sobel(graySrc, grad_x, CV_32FC1, 1, 0, 3, 1, 0, cv::BORDER_DEFAULT);
convertScaleAbs(grad_x, abs_grad_x);
// 计算y方向的梯度
Sobel(graySrc, grad_y, CV_32FC1, 0, 1, 3, 1, 0, cv::BORDER_DEFAULT);
convertScaleAbs(grad_y, abs_grad_y);
// 合并梯度
cv::Mat dstGradientImage;
addWeighted(abs_grad_x, 0.5, abs_grad_y, 0.5, 0, dstGradientImage);
cv::imwrite("dstGradientImage.jpg", dstGradientImage);
cv::Mat fuzhi;
cv::Mat jiaodu;
cv::cartToPolar(grad_x, grad_y, fuzhi, jiaodu, true); //角度的结果在0-360之间