python opencv實現(xiàn)圖像邊緣檢測
本文利用python opencv進行圖像的邊緣檢測,一般要經(jīng)過如下幾個步驟:
1、去噪
如cv2.GaussianBlur()等函數(shù);
2、計算圖像梯度
圖像梯度表達的是各個像素點之間,像素值大小的變化幅度大小,變化較大,則可以認為是出于邊緣位置,最多可簡化為如下形式:

3、非極大值抑制
在獲得梯度的方向和大小之后,應該對整幅圖像做一個掃描,去除那些非邊界上的點。對每一個像素進行檢查,看這個點的梯度是不是周圍具有相同梯度方向的點中最大的。如下圖所示:

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

在Python Opencv接口中,提供了Canny函數(shù),可以對圖像進行一鍵執(zhí)行邊緣檢測。
接下來,利用Canny函數(shù)進行邊緣檢測的實驗。
Canny函數(shù)需要指定幾個參數(shù):
1、需要進行邊緣檢測的原圖
2、閾值下限
3、閾值上限
我們?yōu)榱四軌蚩吹讲煌撝捣秶鷮吘墮z測結果的影響,設置了兩個滑動條,來分別表示閾值上下限。
完整代碼如下:
# -*- coding: utf-8 -*-
"""
Created on Thu Sep 13 14:23:32 2018
@author: Leon
內容:
對圖片進行邊緣檢測;
添加滑動條,可自由調整閾值上下限。
"""
import cv2
import numpy as np
def nothing(x):
pass
cv2.namedWindow('Canny',0)
# 創(chuà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
# 讀取滑動條數(shù)值
minval = cv2.getTrackbarPos('minval','Canny')
maxval = cv2.getTrackbarPos('maxval','Canny')
edges = cv2.Canny(img,minval,maxval)
# 拼接原圖與邊緣監(jiān)測結果圖
img_2 = np.hstack((img,edges))
cv2.imshow('Canny',img_2)
cv2.destroyAllWindows()
效果如圖:

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
對python while循環(huán)和雙重循環(huán)的實例詳解
今天小編就為大家分享一篇對python while循環(huán)和雙重循環(huán)的實例詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-08-08
Python開發(fā)游戲之井字游戲的實戰(zhàn)步驟
最近正在學習Python,所以最近做了一個關于Python的實例,下面這篇文章主要給大家介紹了關于Python開發(fā)游戲之井字游戲的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下2023-02-02
python實現(xiàn)在pickling的時候壓縮的方法
這篇文章主要介紹了python實現(xiàn)在pickling的時候壓縮的方法,比較具有實用價值,需要的朋友可以參考下2014-09-09

