日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

数字图像处理之图像边缘

發(fā)布時(shí)間:2023/12/15 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数字图像处理之图像边缘 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

圖像邊緣主要包含下面幾個(gè)部分

導(dǎo)入庫(kù)

import numpy as np import matplotlib.pyplot as plt import cv2 as cv

圖片輸出函數(shù)

def show(img):if img.ndim == 2:plt.imshow(img,cmap='gray')else:plt.imshow(cv.cvtColor(img,cv.COLOR_RGB2BGR))plt.show()

Premitt算子

Premitt算子一般包含以下兩種:

通過(guò)對(duì)水平方向和豎直方向的圖片進(jìn)行處理,然后合成,看最終的效果如何。

kx = np.array([[-1,0,1],[-1,0,1],[-1,0,1] ],dtype=np.float32) ky = np.array([[-1,-1,-1],[0,0,0],[1,1,1] ],dtype=np.float32) imgX = cv.filter2D(img,cv.CV_64F,kx) imgY = cv.filter2D(img,cv.CV_64F,ky) imgXY2 = np.abs(imgX)+np.abs(imgY) show(np.hstack([img,np.abs(imgX).clip(0,255),np.abs(imgY).clip(0,255),np.abs(imgXY2).clip(0,255)]))

處理效果如下所示:

Roberts算子

Roberts算子也有兩種形式,跟Premitt算子大同小異。

#Roberts算子 kx = np.array([[-1,0],[0,1] ],dtype=np.float32) ky = np.array([[0,1],[1,0] ],dtype=np.float32) imgX = cv.filter2D(img,cv.CV_64F,kx) imgY = cv.filter2D(img,cv.CV_64F,ky) imgXY = np.sqrt(imgX**2+imgY**2) imgXY2 = np.abs(imgX)+np.abs(imgY) show(np.hstack([img,np.abs(imgX).clip(0,255),np.abs(imgY).clip(0,255),np.abs(imgXY2).clip(0,255)]))

但是效果不如前者

Sobel-Feldman、Scharr算子

這兩種算子與上面的兩種算子,卷積核不一樣,其余的地方大同小異,看看效果如何。

#soble-feldmen算子 imgX = cv.Sobel(img,cv.CV_16S,1,0)#x方向一階偏導(dǎo),y方向0階偏導(dǎo) imgY = cv.Sobel(img,cv.CV_16S,0,1)#y方向一階偏導(dǎo),x方向0階偏導(dǎo) imgXY = np.abs(imgX)+np.abs(imgY) show(np.hstack([img,np.abs(imgX).clip(0,255),np.abs(imgY).clip(0,255),np.abs(imgXY).clip(0,255)])) #Scharr算子 imgX = cv.Scharr(img,cv.CV_64F,1,0) imgY = cv.Scharr(img,cv.CV_64F,0,1) imgXY = np.sqrt(imgX**2+imgY**2) show(np.hstack([img,np.abs(imgX).clip(0,255),np.abs(imgY).clip(0,255),np.abs(imgXY).clip(0,255)]))

soble-feldmen算子

Scharr算子

Laplacian算子

Laplacian算子基本上卷積核如下圖所示:

opencv中有用來(lái)實(shí)現(xiàn)的方法

#Laplacian算子 img_lap = cv.Laplacian(img,cv.CV_64F) show(np.abs(img_lap).clip(10,255))

LoG算子

LoG算子,是高斯模糊和Laplacian算子結(jié)合而成的。

#Log算子 img_blur = cv.GaussianBlur(img,(3,3),1) img_log = cv.Laplacian(img_blur,cv.CV_64F) show(np.hstack([np.abs(img_lap).clip(0,255),np.abs(img_log).clip(0,255)]))

和單純的Laplacian相比,去除了很多噪聲,emmm但是效果不是很好,可能是參數(shù)的問(wèn)題。

Canny算法

Canny算法的處理方式:

opencv中自帶的方法:

#canny邊緣檢測(cè) img2 = cv.Canny(img,20,200)#低于20一定不是邊緣,大于200就一定是強(qiáng)邊緣,處于20-200之間的,如果靠近強(qiáng)邊緣就一定是邊緣 show(np.hstack([img,img2]))

總結(jié)

以上是生活随笔為你收集整理的数字图像处理之图像边缘的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。