中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

OpenCV如何實現Sobel邊緣檢測

發布時間:2022-08-03 17:49:07 來源:億速云 閱讀:264 作者:iii 欄目:開發技術

今天小編給大家分享一下OpenCV如何實現Sobel邊緣檢測的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。

    一、Sobel算法

    1、算法概述

    Sobel邊緣檢測算法比較簡單,實際應用中效率比canny邊緣檢測效率要高,但是邊緣不如Canny檢測的準確,然而在很多實際應用的場合,sobel邊緣卻是首選,Sobel算子是高斯平滑與微分操作的結合體,所以其抗噪聲能力很強,用途較多。尤其是在對效率要求較高,而對細紋理不太關系的時候。

    使用Sobel算子提取圖像邊緣分3個步驟:

    提取X方向的邊緣,X方向一階Sobel邊緣檢測算法為:

    OpenCV如何實現Sobel邊緣檢測

    提取Y方向的邊緣,Y方向一階Sobel邊緣檢測算法為:

    OpenCV如何實現Sobel邊緣檢測

    綜合兩個方向的邊緣信息得到整幅圖像的邊緣。

    2、主要函數

    Sobel_x_or_y = cv2.Sobel(src, ddepth, dx, dy, dst, ksize, scale, delta, borderType)
    • src:傳入的圖像

    • ddepth:圖像的深度

    • dxdy:指的是求導的階數,0表示這個方向上沒有求導,所填的數一般為0、1、2。

    • ksize:是Sobel算子的大小,即卷積核的大小,必須為奇數1、3、5、7。如果ksize=-1,就演變成為3x3的Scharr算子,scale是縮放導數的比例常數,默認情況為沒有伸縮系數。

    • borderType:是判斷圖像邊界的模式,這個參數默認值為cv2.BORDER_DEFAULT。

    • dstdst之后的參數都是可選參數。

    二、C++代碼

    #include <iostream>
    #include <opencv2\opencv.hpp>
    
    using namespace cv;
    using namespace std;
    
    int main()
    {
    	//----------------讀取圖像-----------------
    	Mat img = imread("1.jpg");
    	//黑白圖像邊緣檢測結果較為明顯
    	Mat gray_img;
    	cvtColor(img, gray_img, COLOR_BGR2GRAY);
    	Mat resultX, resultY, resultXY;
    	//-------------Sobel邊緣檢測--------------
    	//X方向一階邊緣
    	Sobel(img, resultX, CV_16S, 2, 0, 1);
    	convertScaleAbs(resultX, resultX);
    
    	//Y方向一階邊緣
    	Sobel(img, resultY, CV_16S, 0, 1, 3);
    	convertScaleAbs(resultY, resultY);
    
    	//整幅圖像的一階邊緣
    	resultXY = resultX + resultY;
    
    	//顯示圖像
    	imshow("resultX", resultX);
    	imshow("resultY", resultY);
    	imshow("resultXY", resultXY);
    	waitKey(0);
    	return 0;
    }

    三、python代碼

    import cv2
    
    img = cv2.imread("1.jpg")
    gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    
    # -------------------Sobel邊緣檢測------------------------
    x = cv2.Sobel(gray_img, cv2.CV_16S, 1, 0)
    y = cv2.Sobel(gray_img, cv2.CV_16S, 0, 1)
    # cv2.convertScaleAbs(src[, dst[, alpha[, beta]]])
    # 可選參數alpha是伸縮系數,beta是加到結果上的一個值,結果返回uint類型的圖像
    Scale_absX = cv2.convertScaleAbs(x)  # convert 轉換  scale 縮放
    Scale_absY = cv2.convertScaleAbs(y)
    result = cv2.addWeighted(Scale_absX, 0.5, Scale_absY, 0.5, 0)
    # ----------------------顯示結果----------------------------
    cv2.imshow('img', gray_img)
    cv2.imshow('Scale_absX', Scale_absX)
    cv2.imshow('Scale_absY', Scale_absY)
    cv2.imshow('result', result)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

    四、結果展示

    1、灰度圖

    OpenCV如何實現Sobel邊緣檢測

    2、X方向一階邊緣

    OpenCV如何實現Sobel邊緣檢測

    2、Y方向一階邊緣

    OpenCV如何實現Sobel邊緣檢測

    3、整幅圖像的一階邊緣

    OpenCV如何實現Sobel邊緣檢測

    以上就是“OpenCV如何實現Sobel邊緣檢測”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    吉林省| 天镇县| 寿宁县| 水城县| 绿春县| 亚东县| 大余县| 安泽县| 东兴市| 望奎县| 大方县| 江阴市| 东明县| 天水市| 嵊州市| 越西县| 唐海县| 洞口县| 美姑县| 敦煌市| 彰武县| 永昌县| 保德县| 新邵县| 应城市| 若尔盖县| 房山区| 扎兰屯市| 华蓥市| 保山市| 贵南县| 邵东县| 哈巴河县| 富宁县| 红原县| 沛县| 德保县| 烟台市| 正镶白旗| 仁寿县| 辽阳市|