1.源碼實現
#include <iostream>
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;
int main()
{
string file = "./1.jpg";
Mat img = imread(file.c_str(), -1);
pyrDown(img, img, Size(img.cols/2, img.rows/2));
Mat gray, grad_x, grad_y, grad_xy;
//高斯模糊
GaussianBlur(img, img, Size(5,5), 0, 0);
//轉灰度圖
cvtColor(img, gray, CV_BGR2GRAY);
//Sobel處理
Sobel(gray, grad_x, CV_16S, 1, 0, 3); //經典Sobel算子
Sobel(gray, grad_y, CV_16S, 0, 1, 3);
//Scharr(gray_src, grad_x, CV_16S, 1, 0, 3); //改進Sobel算子
//Scharr(gray_src, grad_y, CV_16S, 0, 1, 3);
convertScaleAbs(grad_x, grad_x); //可能爲負;取絕對值;確保顯示
convertScaleAbs(grad_y, grad_y);
addWeighted(grad_x, 0.5, grad_y, 0.5, 0, grad_xy); //混合x,y梯度
imwrite("sobel.jpg", grad_xy);
return 0;
}
2.編譯源碼
$ g++ -o test test.cpp -std=c++11 -I/usr/local/include -L/usr/local/lib -lopencv_core -lopencv_highgui -lopencv_imgproc -Wl,-rpath=/usr/local/lib
3.運行結果