opencv学习笔记16:梯度运算之scharr算子及其函数使用
前文介紹了sobel算子
opencv學習筆記14:sobel算子及其函數使用
scharr算子理論
系數和sobel不一樣,其他一樣。
scharr函數使用
dst=cv2.Scharr(src,ddpetph,dx,dy)
dst:處理結果
src:源圖像
ddpetph:圖像深度
dx:x軸方向,
dy:y軸方向
實際操作中,計算梯度值可能會出現負值而被截斷。通常處理的圖像類型為np.unit8,處理后的結果也是該類型,所有負數截斷為0,發生信息丟失。
所以,在計算時,使用更高的數據類型cv2.CV_64F,取絕對值后再轉換成np.unit8(cv2.CV_8U)。所以深度ddepth不寫-1,改cv2.CV_64F
cv2.convertScaleAbs(imgsrc)
取絕對值,并將梯度圖像轉換成256色位圖,轉換為unit8類型
scharr算例代碼
計算x軸梯度
import cv2 import numpy as np o = cv2.imread('scharr.bmp',cv2.IMREAD_GRAYSCALE) scharrx = cv2.Scharr(o,cv2.CV_64F,1,0) scharrx = cv2.convertScaleAbs(scharrx) # 轉回uint8 cv2.imshow("original",o) cv2.imshow("x",scharrx) cv2.waitKey() cv2.destroyAllWindows()計算y軸梯度
import cv2 import numpy as np o = cv2.imread('scharr.bmp',cv2.IMREAD_GRAYSCALE) scharry = cv2.Scharr(o,cv2.CV_64F,0,1) scharry = cv2.convertScaleAbs(scharry) # 轉回uint8 cv2.imshow("original",o) cv2.imshow("y",scharry) cv2.waitKey() cv2.destroyAllWindows()計算dx+dy
import cv2 import numpy as np o = cv2.imread('scharr.bmp',cv2.IMREAD_GRAYSCALE) scharrx = cv2.Scharr(o,cv2.CV_64F,1,0) scharry = cv2.Scharr(o,cv2.CV_64F,0,1) scharrx = cv2.convertScaleAbs(scharrx) # 轉回uint8 scharry = cv2.convertScaleAbs(scharry) scharrxy = cv2.addWeighted(scharrx,0.5,scharry,0.5,0) cv2.imshow("original",o) cv2.imshow("xy",scharrxy) cv2.waitKey() cv2.destroyAllWindows()錯誤示例:dx=1,dy=1
這點不同于sobel
dx >= 0 && dy >= 0 && dx+dy == 1
注意:
dst=cv2.Scharr(src,cv2.CV_64F,dx,dy)
等于
dst=cv2.Sobel(src,cv2.CV_64F,dx,dy,-1)
Sobel對一個卷積核參數,默認為3.當卷積核=-1時,表示Scharr函數
總目錄鏈接:
python3+opencv學習筆記匯總目錄(適合基礎入門學習)
進階版梯度講解:
opencv進階學習筆記10:圖像金字塔和圖像梯度
電氣專業的計算機小白,寫博文不容易。如果你覺得本文對你有用,請點個贊支持下,謝謝。
總結
以上是生活随笔為你收集整理的opencv学习笔记16:梯度运算之scharr算子及其函数使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 年息5%是多少
- 下一篇: opencv学习笔记17:梯度运算之la