十年網(wǎng)站開發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶 + 靠譜的建站團(tuán)隊(duì)
量身定制 + 運(yùn)營維護(hù)+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
這篇“python的Sobel算子怎么使用”文章的知識(shí)點(diǎn)大部分人都不太理解,所以小編給大家總結(jié)了以下內(nèi)容,內(nèi)容詳細(xì),步驟清晰,具有一定的借鑒價(jià)值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“python的Sobel算子怎么使用”文章吧。

成都創(chuàng)新互聯(lián)堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都網(wǎng)站制作、做網(wǎng)站、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時(shí)代的門頭溝網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!
說明
1、Sobel算子根據(jù)像素點(diǎn)的上下、左右相鄰點(diǎn)的灰度加權(quán)差,在邊緣達(dá)到極值的現(xiàn)象來檢測邊緣。
它具有平滑的噪聲功能,并提供更準(zhǔn)確的邊緣方向信息。由于Sobel算子結(jié)合了高斯平滑度和微分求導(dǎo)(分化),因此結(jié)果會(huì)更具抗噪性,當(dāng)對精度要求不高時(shí),Sobel算子是一種常用的邊緣檢測方法。
2、Sobel算子仍然是過濾器,但它有方向。
dst = cv2.Sobel(src, ddepth, dx, dy[, dst[, ksize[, scale[, delta[, borderType]]]]])
實(shí)例
# coding=utf-8
import cv2
import numpy as np
img = cv2.imread("D:/test/26.png", 0)
'''
在Sobel函數(shù)的第二個(gè)參數(shù)這里使用了cv2.CV_16S。
因?yàn)镺penCV文檔中對Sobel算子的介紹中有這么一句:
“in the case of 8-bit input images it will result in truncated derivatives”。
即Sobel函數(shù)求完導(dǎo)數(shù)后會(huì)有負(fù)值,還有會(huì)大于255的值。
而原圖像是uint8,即8位無符號(hào)數(shù),所以Sobel建立的圖像位數(shù)不夠,會(huì)有截?cái)唷?
因此要使用16位有符號(hào)的數(shù)據(jù)類型,即cv2.CV_16S。
在經(jīng)過處理后,別忘了用convertScaleAbs()函數(shù)將其轉(zhuǎn)回原來的uint8形式。
否則將無法顯示圖像,而只是一副灰色的窗口。convertScaleAbs()的原型為:
dst = cv2.convertScaleAbs(src[, dst[, alpha[, beta]]])
其中可選參數(shù)alpha是伸縮系數(shù),beta是加到結(jié)果上的一個(gè)值。結(jié)果返回uint8類型的圖片。
由于Sobel算子是在兩個(gè)方向計(jì)算的,最后還需要用cv2.addWeighted(...)函數(shù)將其組合起來。
其函數(shù)原型為:
dst = cv2.addWeighted(src1, alpha, src2, beta, gamma[, dst[, dtype]])
其中alpha是第一幅圖片中元素的權(quán)重,beta是第二個(gè)的權(quán)重,gamma是加到最后結(jié)果上的一個(gè)值。
'''
x = cv2.Sobel(img, cv2.CV_16S, 1, 0)
y = cv2.Sobel(img, cv2.CV_16S, 0, 1)
absX = cv2.convertScaleAbs(x)# 轉(zhuǎn)回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()以上就是關(guān)于“python的Sobel算子怎么使用”這篇文章的內(nèi)容,相信大家都有了一定的了解,希望小編分享的內(nèi)容對大家有幫助,若想了解更多相關(guān)的知識(shí)內(nèi)容,請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。