Python+OpenCV 圖像邊緣檢測(cè)四種實(shí)現(xiàn)方法
更新時(shí)間:2021年11月26日 09:07:12 投稿:newname
本文主要介紹了通過(guò)OpenCV中Sobel算子、Schaar算子、Laplacian算子以及Canny分別實(shí)現(xiàn)圖像邊緣檢測(cè)并總結(jié)了四者的優(yōu)缺點(diǎn),感興趣的同學(xué)可以參考一下
import cv2 as cv import numpy as np import matplotlib.pyplot as plt # 設(shè)置兼容中文 plt.rcParams['font.family'] = ['sans-serif'] plt.rcParams['font.sans-serif'] = ['SimHei']
D:\Anaconda\AZWZ\lib\site-packages\numpy\_distributor_init.py:30: UserWarning: loaded more than 1 DLL from .libs:
D:\Anaconda\AZWZ\lib\site-packages\numpy\.libs\libopenblas.NOIJJG62EMASZI6NYURL6JBKM4EVBGM7.gfortran-win_amd64.dll
D:\Anaconda\AZWZ\lib\site-packages\numpy\.libs\libopenblas.WCDJNK7YVMPZQ2ME2ZZHJJRJ3JIKNDB7.gfortran-win_amd64.dll
warnings.warn("loaded more than 1 DLL from .libs:\n%s" %
horse = cv.imread('img/horse.jpg',0)
plt.imshow(horse,cmap=plt.cm.gray)
plt.imshow(horse,cmap=plt.cm.gray)

1.Sobel算子
# 1,0 代表沿x方向做sobel算子 x = cv.Sobel(horse,cv.CV_16S,1,0) # 0,1 代表沿y方向做sobel算子 y = cv.Sobel(horse,cv.CV_16S,0,1)
# 格式轉(zhuǎn)換 absx = cv.convertScaleAbs(x) absy = cv.convertScaleAbs(y)
# 邊緣檢測(cè)結(jié)果 res = cv.addWeighted(absx,0.5,absy,0.5,0)
plt.figure(figsize=(20,20))
plt.subplot(1,2,1)
m1 = plt.imshow(horse,cmap=plt.cm.gray)
plt.title("原圖")
plt.subplot(1,2,2)
m2 = plt.imshow(res,cmap=plt.cm.gray)
plt.title("Sobel算子邊緣檢測(cè)")
Text(0.5, 1.0, 'Sobel算子邊緣檢測(cè)')

2.Schaar算子(更能體現(xiàn)細(xì)節(jié))
# 1,0 代表沿x方向做sobel算子 x = cv.Sobel(horse,cv.CV_16S,1,0,ksize=-1) # 0,1 代表沿y方向做sobel算子 y = cv.Sobel(horse,cv.CV_16S,0,1,ksize=-1)
# 格式轉(zhuǎn)換 absx = cv.convertScaleAbs(x) absy = cv.convertScaleAbs(y)
# 邊緣檢測(cè)結(jié)果 res = cv.addWeighted(absx,0.5,absy,0.5,0)
plt.figure(figsize=(20,20))
plt.subplot(1,2,1)
m1 = plt.imshow(horse,cmap=plt.cm.gray)
plt.title("原圖")
plt.subplot(1,2,2)
m2 = plt.imshow(res,cmap=plt.cm.gray)
plt.title("Schaar算子邊緣檢測(cè)")
Text(0.5, 1.0, 'Schaar算子邊緣檢測(cè)')

3.Laplacian算子(基于零穿越的,二階導(dǎo)數(shù)的0值點(diǎn))
res = cv.Laplacian(horse,cv.CV_16S)
res = cv.convertScaleAbs(res)
plt.figure(figsize=(20,20))
plt.subplot(1,2,1)
m1 = plt.imshow(horse,cmap=plt.cm.gray)
plt.title("原圖")
plt.subplot(1,2,2)
m2 = plt.imshow(res,cmap=plt.cm.gray)
plt.title("Laplacian算子邊緣檢測(cè)")
Text(0.5, 1.0, 'Laplacian算子邊緣檢測(cè)')

4.Canny邊緣檢測(cè)(被認(rèn)為是最優(yōu)的邊緣檢測(cè)算法)




res = cv.Canny(horse,0,100)
# res = cv.convertScaleAbs(res) Canny邊緣檢測(cè)是一種二值檢測(cè),不需要轉(zhuǎn)換格式這一個(gè)步驟
plt.figure(figsize=(20,20))
plt.subplot(1,2,1)
m1 = plt.imshow(horse,cmap=plt.cm.gray)
plt.title("原圖")
plt.subplot(1,2,2)
m2 = plt.imshow(res,cmap=plt.cm.gray)
plt.title("Canny邊緣檢測(cè)")
Text(0.5, 1.0, 'Canny邊緣檢測(cè)')

總結(jié)


以上就是Python+OpenCV 圖像邊緣檢測(cè)四種實(shí)現(xiàn)方法的詳細(xì)內(nèi)容,更多關(guān)于Python OpenCV圖像邊緣檢測(cè)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Python解析excel文件存入sqlite數(shù)據(jù)庫(kù)的方法
最近工作中遇到一個(gè)需求,需要使用Python解析excel文件并存入sqlite,本文就實(shí)現(xiàn)的過(guò)程做個(gè)總結(jié)分享給大家,文中包括數(shù)據(jù)庫(kù)設(shè)計(jì)、建立數(shù)據(jù)庫(kù)、Python解析excel文件、Python讀取文件名并解析和將解析的數(shù)據(jù)存儲(chǔ)入庫(kù),有需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。2016-11-11
Python測(cè)試WebService接口的實(shí)現(xiàn)示例
webService接口是走soap協(xié)議通過(guò)http傳輸,請(qǐng)求報(bào)文和返回報(bào)文都是xml格式的,本文主要介紹了Python測(cè)試WebService接口,具有一定的參考價(jià)值,感興趣的可以了解一下2024-03-03
Python去除字符串中某個(gè)字符的多種實(shí)現(xiàn)方法
這篇文章主要介紹了Python去除字符串中某個(gè)字符的多種實(shí)現(xiàn)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-08-08
使用python list 查找所有匹配元素的位置實(shí)例
今天小編就為大家分享一篇使用python list 查找所有匹配元素的位置實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-06-06
Python編程基礎(chǔ)之構(gòu)造方法和析構(gòu)方法詳解
這篇文章主要為大家詳細(xì)介紹了Python的構(gòu)造方法和析構(gòu)方法,使用Python編程基礎(chǔ),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-01-01
python 監(jiān)控logcat關(guān)鍵字功能
這篇文章主要介紹了python 監(jiān)控logcat關(guān)鍵字功能,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-09-09

