欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python opencv實(shí)現(xiàn)圖像邊緣檢測(cè)

 更新時(shí)間:2021年08月24日 11:07:33   作者:葉舟  
這篇文章主要為大家詳細(xì)介紹了python opencv實(shí)現(xiàn)圖像邊緣檢測(cè),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文利用python opencv進(jìn)行圖像的邊緣檢測(cè),一般要經(jīng)過(guò)如下幾個(gè)步驟:

1、去噪

如cv2.GaussianBlur()等函數(shù);

2、計(jì)算圖像梯度

圖像梯度表達(dá)的是各個(gè)像素點(diǎn)之間,像素值大小的變化幅度大小,變化較大,則可以認(rèn)為是出于邊緣位置,最多可簡(jiǎn)化為如下形式:

3、非極大值抑制

在獲得梯度的方向和大小之后,應(yīng)該對(duì)整幅圖像做一個(gè)掃描,去除那些非邊界上的點(diǎn)。對(duì)每一個(gè)像素進(jìn)行檢查,看這個(gè)點(diǎn)的梯度是不是周?chē)哂邢嗤荻确较虻狞c(diǎn)中最大的。如下圖所示:

4、滯后閾值

現(xiàn)在要確定那些邊界才是真正的邊界。這時(shí)我們需要設(shè)置兩個(gè)閾值:minVal 和maxVal。當(dāng)圖像的灰度梯度高于maxVal 時(shí)被認(rèn)為是真的邊界,那些低于minVal 的邊界會(huì)被拋棄。如果介于兩者之間的話,就要看這個(gè)點(diǎn)是否與某個(gè)被確定為真正的邊界點(diǎn)相連,如果是就認(rèn)為它也是邊界點(diǎn),如果不是就拋棄。如下圖:

在Python Opencv接口中,提供了Canny函數(shù),可以對(duì)圖像進(jìn)行一鍵執(zhí)行邊緣檢測(cè)。 

接下來(lái),利用Canny函數(shù)進(jìn)行邊緣檢測(cè)的實(shí)驗(yàn)。

Canny函數(shù)需要指定幾個(gè)參數(shù):

1、需要進(jìn)行邊緣檢測(cè)的原圖
2、閾值下限
3、閾值上限

我們?yōu)榱四軌蚩吹讲煌撝捣秶鷮?duì)邊緣檢測(cè)結(jié)果的影響,設(shè)置了兩個(gè)滑動(dòng)條,來(lái)分別表示閾值上下限。

完整代碼如下:

# -*- coding: utf-8 -*-
"""
Created on Thu Sep 13 14:23:32 2018
@author: Leon
內(nèi)容:
對(duì)圖片進(jìn)行邊緣檢測(cè);
添加滑動(dòng)條,可自由調(diào)整閾值上下限。
"""
 
import cv2
import numpy as np
 
def nothing(x):
  pass
 
cv2.namedWindow('Canny',0)
# 創(chuàng)建滑動(dòng)條
cv2.createTrackbar('minval','Canny',0,255,nothing)
cv2.createTrackbar('maxval','Canny',0,255,nothing)
 
img = cv2.imread('Tree.jpg',0)
 
# 高斯濾波去噪
img = cv2.GaussianBlur(img,(3,3),0)
edges =img
 
k=0
while(1):
 
  key = cv2.waitKey(50) & 0xFF
  if key == ord('q'):
    break
  # 讀取滑動(dòng)條數(shù)值
  minval = cv2.getTrackbarPos('minval','Canny')
  maxval = cv2.getTrackbarPos('maxval','Canny')
  edges = cv2.Canny(img,minval,maxval)
  
  # 拼接原圖與邊緣監(jiān)測(cè)結(jié)果圖
  img_2 = np.hstack((img,edges))
  cv2.imshow('Canny',img_2)
 
cv2.destroyAllWindows()

效果如圖:

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論