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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

数字图像处理之图像边缘

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

圖像邊緣主要包含下面幾個部分

導入庫

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算子一般包含以下兩種:

通過對水平方向和豎直方向的圖片進行處理,然后合成,看最終的效果如何。

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方向一階偏導,y方向0階偏導 imgY = cv.Sobel(img,cv.CV_16S,0,1)#y方向一階偏導,x方向0階偏導 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中有用來實現(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ù)的問題。

Canny算法

Canny算法的處理方式:

opencv中自帶的方法:

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

總結(jié)

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

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