新聞中心
這里有您想知道的互聯網營銷解決方案
創(chuàng)新互聯Python教程:python中Sobel算子如何使用
說明

1、Sobel算子根據像素點的上下、左右相鄰點的灰度加權差,在邊緣達到極值的現象來檢測邊緣。
它具有平滑的噪聲功能,并提供更準確的邊緣方向信息。由于Sobel算子結合了高斯平滑度和微分求導(分化),因此結果會更具抗噪性,當對精度要求不高時,Sobel算子是一種常用的邊緣檢測方法。
2、Sobel算子仍然是過濾器,但它有方向。
dst = cv2.Sobel(src, ddepth, dx, dy[, dst[, ksize[, scale[, delta[, borderType]]]]])
實例
# coding=utf-8
import cv2
import numpy as np
img = cv2.imread("D:/test/26.png", 0)
'''
在Sobel函數的第二個參數這里使用了cv2.CV_16S。
因為OpenCV文檔中對Sobel算子的介紹中有這么一句:
“in the case of 8-bit input images it will result in truncated derivatives”。
即Sobel函數求完導數后會有負值,還有會大于255的值。
而原圖像是uint8,即8位無符號數,所以Sobel建立的圖像位數不夠,會有截斷。
因此要使用16位有符號的數據類型,即cv2.CV_16S。
在經過處理后,別忘了用convertScaleAbs()函數將其轉回原來的uint8形式。
否則將無法顯示圖像,而只是一副灰色的窗口。convertScaleAbs()的原型為:
dst = cv2.convertScaleAbs(src[, dst[, alpha[, beta]]])
其中可選參數alpha是伸縮系數,beta是加到結果上的一個值。結果返回uint8類型的圖片。
由于Sobel算子是在兩個方向計算的,最后還需要用cv2.addWeighted(...)函數將其組合起來。
其函數原型為:
dst = cv2.addWeighted(src1, alpha, src2, beta, gamma[, dst[, dtype]])
其中alpha是第一幅圖片中元素的權重,beta是第二個的權重,gamma是加到最后結果上的一個值。
'''
x = cv2.Sobel(img, cv2.CV_16S, 1, 0)
y = cv2.Sobel(img, cv2.CV_16S, 0, 1)
absX = cv2.convertScaleAbs(x)# 轉回uint8
absY = cv2.convertScaleAbs(y)
dst = cv2.addWeighted(absX, 0.5, absY, 0.5, 0)
cv2.imshow("orign", img)
cv2.imshow("absX", absX)
cv2.imshow("absY", absY)
cv2.imshow("Result", dst)
cv2.waitKey(0)
cv2.destroyAllWindows()以上就是python中Sobel算子的使用,希望對大家有所幫助。更多Python學習指路:創(chuàng)新互聯python教程
本文教程操作環(huán)境:windows7系統(tǒng)、Python 3.9.1,DELL G3電腦。
名稱欄目:創(chuàng)新互聯Python教程:python中Sobel算子如何使用
文章起源:http://m.5511xx.com/article/ccopccs.html


咨詢
建站咨詢
