opencv sobel算子例子

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.運行結果


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章