先看高級版的python3的canny的自適應邊緣檢測:

成都創(chuàng)新互聯(lián)堅持“要么做到,要么別承諾”的工作理念,服務領域包括:成都網(wǎng)站設計、網(wǎng)站建設、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣等服務,滿足客戶于互聯(lián)網(wǎng)時代的鳳慶網(wǎng)站設計、移動媒體設計的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡建設合作伙伴!
內(nèi)容:
1 canny的邊緣檢測的介紹。
2 三種方法的canny的邊緣檢測,由淺入深地介紹:固定值的靜態(tài),可自調節(jié)的,自適應的。
說明:
1 環(huán)境:python3.8、opencv4.5.3和matplotlib3.4.3。
2 圖片:來自品閱網(wǎng)正版免費圖庫。
3 實現(xiàn)自適應閾值的canny邊緣檢測的參考代碼和文章:
上述的代碼,本機均有報錯,故對代碼進行修改,注釋和運行。
初級canny:
1 介紹:opencv中給出了canny邊緣檢測的接口,直接調用:
即可得到邊緣檢測的結果ret,其中,t1,t2是需要人為設置的閾值。
2 python的opencv的一行代碼即可實現(xiàn)邊緣檢測。
3 Canny函數(shù)及使用:
4 Canny邊緣檢測流程:
去噪 -- 梯度 -- 非極大值抑制 -- 滯后閾值
5 代碼:
6 操作和過程:
7 原圖:
8 疑問:
ret = cv2.canny(img,t1,t2),其中,t1,t2是需要人為設置的閾值,一般人怎么知道具體數(shù)值是多少,才是最佳的呀?所以,這是它的缺點。
中級canny:
1 中級canny,就是可調節(jié)的閾值,找到最佳的canny邊緣檢測效果。
2 采用cv2.createTrackbar來調節(jié)閾值。
3 代碼:
4 操作和效果:
5 原圖:
高級canny:
1 自適應canny的算法:
ret = cv2.canny(img,t1,t2)
即算法在運行過程中能夠自適應地找到較佳的分割閾值t1,t2。
2 文件結構:
3 main.py代碼:
4 dog.py代碼:
5 bilateralfilt.py代碼:
6 原圖:
7 效果圖:本文第一個gif圖,此處省略。
小結:
1 本文由淺入深,總結的很好,適合收藏。
2 對于理解python的opencv的canny的邊緣檢測,很有幫助。
3 本文高級版canny自適應的算法參考2篇文章,雖然我進行代碼的刪除,注釋,修改,優(yōu)化等操作,故我不標注原創(chuàng),對原作者表達敬意。
4 自己總結和整理,分享出來,希望對大家有幫助。
使用opencv-python的內(nèi)置函數(shù),對圖片進行降噪處理。
8Fourier變換的應用——圖像去噪
給出的圖片是RGB圖片,也就是需要有三個通道。
下面的函數(shù)用來去噪。
img=np.uint8(cv2.fastNlMeansDenoisingColored(img,None,10,10,7,21))
對這個圖片進行局部自適應二值化處理:
img=hui(img)
th1 = cv2.adaptiveThreshold(img,255,cv2.ADAPTIVE_THRESH_MEAN_C,cv2.THRESH_BINARY,31,5)
另一種局部自適應二值化處理:
th2 = cv2.adaptiveThreshold(img,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C,cv2.THRESH_BINARY,31,5)
在第一步連續(xù)執(zhí)行兩次去噪,得到的三幅圖片是:
執(zhí)行三次降噪。
連續(xù)10次降噪。
#coding:utf-8
import?sys,os
from?PIL?import?Image,ImageDraw
#二值數(shù)組
t2val?=?{}
def?twoValue(image,G):
for?y?in?xrange(0,image.size[1]):
for?x?in?xrange(0,image.size[0]):
g?=?image.getpixel((x,y))
if?g??G:
t2val[(x,y)]?=?1
else:
t2val[(x,y)]?=?0
#?降噪?
#?根據(jù)一個點A的RGB值,與周圍的8個點的RBG值比較,設定一個值N(0?N?8),當A的RGB值與周圍8個點的RGB相等數(shù)小于N時,此點為噪點?
#?G:?Integer?圖像二值化閥值?
#?N:?Integer?降噪率?0?N?8?
#?Z:?Integer?降噪次數(shù)?
#?輸出?
#??0:降噪成功?
#??1:降噪失敗?
def?clearNoise(image,N,Z):
for?i?in?xrange(0,Z):
t2val[(0,0)]?=?1
t2val[(image.size[0]?-?1,image.size[1]?-?1)]?=?1
for?x?in?xrange(1,image.size[0]?-?1):
for?y?in?xrange(1,image.size[1]?-?1):
nearDots?=?0
L?=?t2val[(x,y)]
if?L?==?t2val[(x?-?1,y?-?1)]:
nearDots?+=?1
if?L?==?t2val[(x?-?1,y)]:
nearDots?+=?1
if?L?==?t2val[(x-?1,y?+?1)]:
nearDots?+=?1
if?L?==?t2val[(x,y?-?1)]:
nearDots?+=?1
if?L?==?t2val[(x,y?+?1)]:
nearDots?+=?1
if?L?==?t2val[(x?+?1,y?-?1)]:
nearDots?+=?1
if?L?==?t2val[(x?+?1,y)]:
nearDots?+=?1
if?L?==?t2val[(x?+?1,y?+?1)]:
nearDots?+=?1
if?nearDots??N:
t2val[(x,y)]?=?1
def?saveImage(filename,size):
image?=?Image.new("1",size)
draw?=?ImageDraw.Draw(image)
for?x?in?xrange(0,size[0]):
for?y?in?xrange(0,size[1]):
draw.point((x,y),t2val[(x,y)])
image.save(filename)
image?=?Image.open("d:/1.jpg").convert("L")
twoValue(image,100)
clearNoise(image,4,1)
saveImage("d:/5.jpg",image.size)
網(wǎng)頁標題:python去噪函數(shù),python 降噪
文章起源:http://chinadenli.net/article6/dsgjdig.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供、小程序開發(fā)、網(wǎng)站排名、定制開發(fā)、服務器托管、網(wǎng)站策劃
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)