最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python如何使用cv2.canny進(jìn)行圖像邊緣檢測(cè)

 更新時(shí)間:2023年01月28日 15:18:55   作者:風(fēng)華明遠(yuǎn)  
這篇文章主要介紹了Python如何使用cv2.canny進(jìn)行圖像邊緣檢測(cè)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

使用cv2.canny進(jìn)行圖像邊緣檢測(cè)

CV2提供了提取圖像邊緣的函數(shù)canny。

其算法思想如下:

  • 1.使用高斯模糊,去除噪音點(diǎn)(cv2.GaussianBlur)
  • 2.灰度轉(zhuǎn)換(cv2.cvtColor)
  • 3.使用sobel算子,計(jì)算出每個(gè)點(diǎn)的梯度大小和梯度方向
  • 4.使用非極大值抑制(只有最大的保留),消除邊緣檢測(cè)帶來(lái)的雜散效應(yīng)
  • 5.應(yīng)用雙閾值,來(lái)確定真實(shí)和潛在的邊緣
  • 6.通過(guò)抑制弱邊緣來(lái)完成最終的邊緣檢測(cè)

Canny函數(shù)的定義如下:

edge = cv2.Canny(image, threshold1, threshold2[, edges[, apertureSize[, L2gradient ]]]) 

參數(shù)含義如下:

  • image:要檢測(cè)的圖像
  • threshold1:閾值1(最小值)
  • threshold2:閾值2(最大值),使用此參數(shù)進(jìn)行明顯的邊緣檢測(cè)
  • edges:圖像邊緣信息
  • apertureSize:sobel算子(卷積核)大小
  • L2gradient :布爾值。
  • True:使用更精確的L2范數(shù)進(jìn)行計(jì)算(即兩個(gè)方向的導(dǎo)數(shù)的平方和再開方)
  • False:使用L1范數(shù)(直接將兩個(gè)方向?qū)?shù)的絕對(duì)值相加)

L2gradie=True使用的公式

其中較大的閾值2用于檢測(cè)圖像中明顯的邊緣,但一般情況下檢測(cè)的效果不會(huì)那么完美,邊緣檢測(cè)出來(lái)是斷斷續(xù)續(xù)的。所以這時(shí)候用較小的第一個(gè)閾值用于將這些間斷的邊緣連接起來(lái)。

閾值對(duì)檢測(cè)結(jié)果的影響

import cv2
import numpy as np
from matplotlib import pyplot as plt

img = cv2.imread('d:\\girl.png')
edges = cv2.Canny(img,100,200,apertureSize=3)
edges2 = cv2.Canny(img,100,200,apertureSize=5)
plt.subplot(131),plt.imshow(img,cmap = 'gray')
plt.title('Original Image'), plt.xticks([]), plt.yticks([])
plt.subplot(132),plt.imshow(edges,cmap = 'gray')
plt.title('Edge Image1'), plt.xticks([]), plt.yticks([])
plt.subplot(133),plt.imshow(edges2,cmap = 'gray')
plt.title('Edge Image2'), plt.xticks([]), plt.yticks([])
plt.show()

可以看到,在調(diào)整threshold1之后,檢測(cè)出的邊緣增多了。

sobel算子對(duì)檢測(cè)結(jié)果的影響

sobel默認(rèn)的算子大小是3,擴(kuò)大算子,會(huì)獲得更多的細(xì)節(jié),但是也更能提取圖像了。

import cv2
import numpy as np
from matplotlib import pyplot as plt

img = cv2.imread('d:\\girl.png')
edges = cv2.Canny(img,100,200,apertureSize=3)
edges2 = cv2.Canny(img,100,200,apertureSize=5)
plt.subplot(131),plt.imshow(img,cmap = 'gray')
plt.title('Original Image'), plt.xticks([]), plt.yticks([])
plt.subplot(132),plt.imshow(edges,cmap = 'gray')
plt.title('Edge Image1'), plt.xticks([]), plt.yticks([])
plt.subplot(133),plt.imshow(edges2,cmap = 'gray')
plt.title('Edge Image2'), plt.xticks([]), plt.yticks([])
plt.show()

范數(shù)對(duì)檢測(cè)結(jié)果的影響

L2gradient=True時(shí),檢測(cè)出的邊緣減少了。

import cv2
import numpy as np
from matplotlib import pyplot as plt

img = cv2.imread('d:\\girl.png')
edges = cv2.Canny(img,100,200,L2gradient=False)
edges2 = cv2.Canny(img,100,200,L2gradient=True)
plt.subplot(131),plt.imshow(img,cmap = 'gray')
plt.title('Original Image'), plt.xticks([]), plt.yticks([])
plt.subplot(132),plt.imshow(edges,cmap = 'gray')
plt.title('Edge Image1'), plt.xticks([]), plt.yticks([])
plt.subplot(133),plt.imshow(edges2,cmap = 'gray')
plt.title('Edge Image2'), plt.xticks([]), plt.yticks([])
plt.show()

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論

苗栗市| 庆城县| 石阡县| 连江县| 邛崃市| 黄龙县| 麦盖提县| 姜堰市| 淄博市| 宜城市| 襄樊市| 滨州市| 开封市| 内黄县| 石门县| 平和县| 镇平县| 郎溪县| 光山县| 安图县| 略阳县| 清新县| 无棣县| 柏乡县| 博乐市| 方城县| 英超| 德保县| 当涂县| 高尔夫| 天门市| 翼城县| 博白县| 英超| 禹州市| 满城县| 灵宝市| 永登县| 阿拉善盟| 镇坪县| 寿阳县|