您好,登錄后才能下訂單哦!
今天小編給大家分享一下OpenCV如何實現Sobel邊緣檢測的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。
Sobel邊緣檢測算法比較簡單,實際應用中效率比canny邊緣檢測效率要高,但是邊緣不如Canny檢測的準確,然而在很多實際應用的場合,sobel邊緣卻是首選,Sobel算子是高斯平滑與微分操作的結合體,所以其抗噪聲能力很強,用途較多。尤其是在對效率要求較高,而對細紋理不太關系的時候。
使用Sobel算子提取圖像邊緣分3個步驟:
提取X方向的邊緣,X方向一階Sobel邊緣檢測算法為:
提取Y方向的邊緣,Y方向一階Sobel邊緣檢測算法為:
綜合兩個方向的邊緣信息得到整幅圖像的邊緣。
Sobel_x_or_y = cv2.Sobel(src, ddepth, dx, dy, dst, ksize, scale, delta, borderType)
src
:傳入的圖像
ddepth
:圖像的深度
dx
、dy
:指的是求導的階數,0表示這個方向上沒有求導,所填的數一般為0、1、2。
ksize
:是Sobel算子的大小,即卷積核的大小,必須為奇數1、3、5、7。如果ksize=-1,就演變成為3x3的Scharr算子,scale是縮放導數的比例常數,默認情況為沒有伸縮系數。
borderType
:是判斷圖像邊界的模式,這個參數默認值為cv2.BORDER_DEFAULT。
dst
及dst
之后的參數都是可選參數。
#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; }
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、灰度圖
2、X方向一階邊緣
2、Y方向一階邊緣
3、整幅圖像的一階邊緣
以上就是“OpenCV如何實現Sobel邊緣檢測”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。