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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

数字图像处理之Canny编程实现

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

Canny邊緣檢測算法的流程如下所示:


在某一角度范圍內,我們將這一范圍內的最大值保留,其余的都置為0.

代碼如下:

import numpy as np import matplotlib.pyplot as plt import cv2 as cvdef show(img):if img.ndim == 2:plt.imshow(img,cmap='gray')else:plt.imshow(cv.cvtColor(img,cv.COLOR_RGB2BGR))plt.show()img = cv.imread('E:/DataSolve/sc.jpg',0) #編程實現Canny算法 #1. 平滑 img_blur = cv.GaussianBlur(img,(5,5),2) #2. 計算梯度 gradX = cv.Sobel(img,cv.CV_64F,1,0) gradY = cv.Sobel(img,cv.CV_64F,0,1) R = np.abs(gradX)+np.abs(gradY) T = np.arctan(gradY/(gradX+1e-3))#計算角度 #3.細化邊緣 h,w = R.shape img_thin = np.zeros_like(R)#生成和R一樣的,但是里面全是0的矩陣 for i in range(1,h-1):for j in range(1,w-1):theta = T[i,j]if -np.pi/8 <= theta< np.pi/8:if R[i,j] == max([R[i,j],R[i,j-1],R[i,j+1]]):img_thin[i,j]=R[i,j]elif -3*np.pi / 8 <= theta <-np.pi / 8:if R[i,j] == max([R[i,j],R[i-1,j+1],R[i+1,j-1]]):img_thin[i,j]=R[i,j]elif np.pi / 8 <= theta < 3*np.pi / 8:if R[i,j] == max([R[i,j],R[i-1,j-1],R[i+1,j+1]]):img_thin[i,j]=R[i,j]else:if R[i,j] == max([R[i,j],R[i-1,j],R[i+1,j]]):img_thin[i, j] = R[i, j] #4. 雙閾值抑制 th1 = 10 th2 = 50 h,w = img_thin.shape img_edge = np.zeros_like(img_thin,dtype=np.uint8) for i in range(1,h-1):for j in range(1,w-1):if img_thin[i,j]>=th2:img_edge[i,j]=255elif img_thin[i,j]>th1:around = img_thin[i-1:i+2,j-1:j+2]if(around.max()>= th2):img_edge[i,j]=255 show(np.hstack([img,img_edge]))

效果不是那么盡如人意,一方面是參數設置問題,另一方面就是opencv中封裝的方法是經過優化的,而我們自己實現的,則有些“粗糙”。不過思想是正確的,缺的就是方法上的改進。

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的数字图像处理之Canny编程实现的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。