Sobel邊緣偵測
• 以一階導數方式進行
• a1=cv2.Sobel(img,cv2.CV_16S,1,0)
影像深度的計算。8U、8S、16U、16S 都是整數,差別在於正負值浮點數這部分建議可使用CV_64F,
1,0 第一個值代表X軸。若為1 代表X軸方向的邊緣偵測。
1,0 第二個值代表Y軸。若為1 代表Y軸方向的邊緣偵測。
1,1 若X軸與Y軸都為1代表同時針對X軸與Y軸方向進行邊緣偵測。
會過濾掉 只有X軸或Y軸方向的邊緣。
laplacian偵測會偵測只有X軸、只有Y軸以及兩個都有的邊緣
• 以一階導數方式進行
• c1=cv2.Sobel(img,cv2.CV_16S,1,0,ksize=5)
也可以做kernel的大小規劃。對雜訊過濾作法不佳,容易受到影響
原圖
- import cv2
- import numpy as np
- img = cv2.imread('houses.jpg')
- img2 = cv2.cvtColor(img,cv2.COLOR_RGB2GRAY)
- cv2.imshow('img2',img2)
- a1 = cv2.Sobel(img, cv2.CV_16S,1,0)
- print('a1',a1)
- print('--'*80)
- b1 = cv2.Sobel(img, cv2.CV_16S,0,1)
- print('b1',b1)
- c1 = cv2.Sobel(img, cv2.CV_16S,1,1)
- x1 = cv2.convertScaleAbs(a1)
- cv2.imshow('x1',x1)
- x2 = cv2.convertScaleAbs(b1)
- cv2.imshow('x2',x2)
- x3 = cv2.convertScaleAbs(c1)
- cv2.imshow('x3',x3)
- cv2.waitKey(0)
複製代碼
結果圖
原圖
- import cv2
- import numpy as np
- img = cv2.imread('Flower.jpg')
- img2 = cv2.cvtColor(img,cv2.COLOR_RGB2GRAY)
- cv2.imshow('img2',img2)
- a1 = cv2.Sobel(img, cv2.CV_16S,1,0, ksize =1)
- print('a1',a1)
- print('--'*80)
- b1 = cv2.Sobel(img, cv2.CV_16S,1,0, ksize =3)
- print('b1',b1)
- c1 = cv2.Sobel(img, cv2.CV_16S,1,0, ksize =5)
- x1 = cv2.convertScaleAbs(a1)
- cv2.imshow('x1',x1)
- x3 = cv2.convertScaleAbs(b1)
- cv2.imshow('x3',x3)
- x5 = cv2.convertScaleAbs(c1)
- cv2.imshow('x5',x5)
- cv2.waitKey(0)
複製代碼
結果圖
|