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

Python+OpenCV實(shí)現(xiàn)邊緣檢測(cè)與角點(diǎn)檢測(cè)詳解

 更新時(shí)間:2023年02月03日 08:39:56   作者:編程愛(ài)好者-阿新  
這篇文章主要為大家詳細(xì)介紹了如何通過(guò)Python+OpenCV實(shí)現(xiàn)邊緣檢測(cè)與角點(diǎn)檢測(cè),文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Python與OpenCV有一定的幫助,需要的可以參考一下

一、邊緣檢測(cè)

Sobel與Canny邊緣檢測(cè)代碼如下所示

import cv2 as cv
import matplotlib.pyplot as plt

1.1、讀取圖像

讀取圖像的代碼如下所示

# 讀取圖像
img = cv.imread('Lena.jpg')
lenna_img = cv.cvtColor(img, cv.COLOR_BGR2RGB)

1.2、圖像轉(zhuǎn)換成灰度圖像

圖像轉(zhuǎn)換成灰度圖像的代碼如下所示

# 圖像轉(zhuǎn)換成灰度圖像
grayImage = cv.cvtColor(img, cv.COLOR_BGR2GRAY)

1.3、Sobel算子

Sobel算子的代碼如下所示

'''
    Sobel算子
'''
x = cv.Sobel(grayImage, cv.CV_16S, 1, 0)     # 對(duì)x求一階導(dǎo)數(shù)
y = cv.Sobel(grayImage, cv.CV_16S, 0, 1)    # 對(duì)y求一階導(dǎo)數(shù)

absX = cv.convertScaleAbs(x)
absY = cv.convertScaleAbs(y)

Sobel = cv.addWeighted(absX, 0.5, absY, 0.5, 0)

1.4、Canny算子

Canny算子的代碼如下所示

'''
    Canny算子
'''

# 高斯濾波降噪
gaussian = cv.GaussianBlur(grayImage, (3, 3), 0)

# Canny算子
Canny = cv.Canny(gaussian, 50, 100)

1.5、顯示正常中文的標(biāo)簽

顯示正常中文的標(biāo)簽的代碼如下所示

# 顯示正常中文的標(biāo)簽
plt.rcParams['font.sans-serif'] = ['SimHei']

titles = [u'(a)原始圖像', u'(b)Sobel圖像', u'(c)Canny圖像']
images = [lenna_img, Sobel, Canny]

for i in range(3):
    plt.subplot(1, 3, i + 1), plt.imshow(images[i], 'gray')
    plt.title(titles[i])
    plt.xticks([]), plt.yticks([])
plt.show()

1.6、邊緣檢測(cè)結(jié)果

邊緣檢測(cè)運(yùn)行結(jié)果結(jié)果如下所示

Sobel與Canny邊緣檢測(cè)的優(yōu)缺點(diǎn)

sobel:

1、sobel優(yōu)點(diǎn):輸出圖像(數(shù)組)的元素通常具有更大的絕對(duì)數(shù)值。

2、sobel缺點(diǎn):由于邊緣是位置的標(biāo)志,對(duì)灰度的變化不敏感。

canny:

1、canny優(yōu)點(diǎn):法能夠盡可能多地標(biāo)識(shí)出圖像中的實(shí)際邊緣;標(biāo)識(shí)出的邊緣要與實(shí)際圖像中的實(shí)際邊緣盡可能接近。

2、canny缺點(diǎn):圖像中的邊緣只能標(biāo)識(shí)一次,并且可能存在的圖像噪聲不應(yīng)標(biāo)識(shí)為邊緣。

二、角點(diǎn)檢測(cè)

Susan與Harris角點(diǎn)檢測(cè)代碼如下所示

import cv2 as cv
import numpy as np
import matplotlib.pyplot as plt

2.1、讀取圖像

讀取圖像的代碼如下所示

# 讀取圖像
img = cv.imread('Lena.jpg')
lenna_img = cv.cvtColor(img, cv.COLOR_BGR2RGB)

2.2、圖像轉(zhuǎn)換成灰度圖像

圖像轉(zhuǎn)換成灰度圖像的代碼如下所示

# 圖像轉(zhuǎn)換成灰度圖像
grayImage = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
grayImage = np.float32(grayImage)

2.3、Harris算子

Harris算子的代碼如下所示

'''
    Harris算子
'''
harrisImage = cv.cornerHarris(grayImage, 2, 3, 0.04)

harrisImage = cv.dilate(harrisImage, None)

2.4、設(shè)置閾值

設(shè)置閾值的代碼如下所示

# 設(shè)置閾值
thresImage = 0.006 * harrisImage.max()

img[harrisImage > thresImage] = [255, 0, 0]

2.5、Susan算子

Susan算子的代碼如下所示

'''
    Susan算子
'''
def img_extraction(image):
    """
        img_extraction 函數(shù)利用susan角點(diǎn)檢測(cè)算法,對(duì)圖像進(jìn)行處理
    """
    print("最小灰度值,%d" % image.min())
    print("最大灰度值,%d" % image.max())
    threshold_value = (int(image.max())-int(image.min())) / 10
    print("初始閾值為: %d" % threshold_value)

    offsetX = [
                -1, 0, 1,
            -2, -1, 0, 1, 2,
        -3, -2, -1, 0, 1, 2, 3,
        -3, -2, -1, 0, 1, 2, 3,
        -3, -2, -1, 0, 1, 2, 3,
            -2, -1, 0, 1, 2,
                -1, 0, 1
        ]
    offsetY = [
                -3, -3, -3,
            -2, -2, -2, -2, -2,
        -1, -1, -1, -1, -1, -1, -1,
             0, 0, 0, 0, 0, 0, 0,
             1, 1, 1, 1, 1, 1, 1,
                2, 2, 2, 2, 2,
                   3, 3, 3
        ]

    for i in range(3, image.shape[0] - 3):     # 利用圓形模板遍歷圖像,計(jì)算每點(diǎn)處的USAN值
        for j in range(3, image.shape[1] - 3):
            same = 0
            for k in range(0, 37):
                if abs(int(image[i + int(offsetY[k]), j + int(offsetX[k]), 0]) - int(image[i, j, 0])) < threshold_value:             # 計(jì)算相似度
                        same += 1

            if same < 18:
                image[i, j, 0] = 18 - same
                image[i, j, 1] = 18 - same
                image[i, j, 2] = 18 - same
            else:
                image[i, j, 0] = 0
                image[i, j, 1] = 0
                image[i, j, 2] = 0

    return image

def img_revise(image):
    """
        img_revise 函數(shù)用于對(duì)角點(diǎn)處理后的圖像,進(jìn)行非極大值抑制修正
    """

    X = [-1, -1, -1, 0, 0, 1, 1, 1]     # X軸偏移
    Y = [-1, 0, 1, -1, 1, -1, 0, 1]     # Y軸偏移
    for i in range(4, image.shape[0]-4):
        for j in range(4, image.shape[1]-4):
            flag = 0
            for k in range(0, 8):
                print(i)
                if image[i, j, 0] <= image[int(i + X[k]), int(j + Y[k]), 0]:
                    flag += 1
                    break

            if flag == 0:       # 判斷是否是周?chē)?個(gè)點(diǎn)中最大的值,是則保留
                image[i, j, 0] = 255
                image[i, j, 1] = 255
                image[i, j, 2] = 255
            else:
                image[i, j, 0] = 0
                image[i, j, 1] = 0
                image[i, j, 2] = 0

    return image

originImage = cv.imread('Lena.jpg')
originImage = cv.cvtColor(originImage, cv.COLOR_BGR2RGB)

2.6、圖像轉(zhuǎn)換成灰度圖像

圖像轉(zhuǎn)換成灰度圖像的代碼如下所示

# 圖像轉(zhuǎn)換成灰度圖像
grayImage = np.float32(originImage)

2.7、調(diào)用susan角點(diǎn)檢測(cè)算法

調(diào)用susan角點(diǎn)檢測(cè)算法的代碼如下所示

# 調(diào)用susan角點(diǎn)檢測(cè)算法
extraImage = img_extraction(originImage)

2.8、調(diào)用img_revise()非極大值抑制修正

調(diào)用img_revise()非極大值抑制修正的代碼如下所示

# 調(diào)用img_revise()非極大值抑制修正
susanImages = img_revise(extraImage)

2.9、顯示正常中文的標(biāo)簽

顯示正常中文的標(biāo)簽的代碼如下所示

# 顯示正常中文的標(biāo)簽
plt.rcParams['font.sans-serif'] = ['SimHei']

titles = [u'(a)原始圖像', u'(b)Harris圖像', u'(c)Susan圖像']
images = [lenna_img, img, susanImages]

for i in range(3):
    plt.subplot(1, 3, i + 1), plt.imshow(images[i], 'gray')
    plt.title(titles[i])
    plt.xticks([]), plt.yticks([])
plt.show()

2.10、角點(diǎn)檢測(cè)結(jié)果

角點(diǎn)檢測(cè)運(yùn)行結(jié)果結(jié)果如下所示

Susan與Harris角點(diǎn)檢測(cè)算子的優(yōu)缺點(diǎn)

Harris:

Harris優(yōu)點(diǎn):

1 旋轉(zhuǎn)不變性,橢圓轉(zhuǎn)過(guò)一定角度但是其形狀保持不變(特征值保持不變)

2 對(duì)于圖像灰度的仿射變化具有部分的不變性,由于僅僅使用了圖像的一介導(dǎo)數(shù),對(duì)于圖像灰度平移變化不變;對(duì)于圖像灰度尺度變化不變

Harris缺點(diǎn):

1 對(duì)尺度很敏感,不具備幾何尺度不變性。

2 提取的角點(diǎn)是像素級(jí)的

Susan:

Susan優(yōu)點(diǎn):大多數(shù)的邊緣檢測(cè)算子會(huì)隨所用模板尺寸的變化而改變其所檢測(cè)出的邊緣的位置,但SUSAN檢測(cè)算子能提供不依賴(lài)于模板尺寸的邊緣精度。

以上就是Python+OpenCV實(shí)現(xiàn)邊緣檢測(cè)與角點(diǎn)檢測(cè)詳解的詳細(xì)內(nèi)容,更多關(guān)于Python OpenCV邊緣 角點(diǎn)檢測(cè)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Python實(shí)現(xiàn)雙向鏈表

    Python實(shí)現(xiàn)雙向鏈表

    這篇文章主要為大家詳細(xì)介紹了Python實(shí)現(xiàn)雙向鏈表,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • Python新手入門(mén)之解釋器的安裝

    Python新手入門(mén)之解釋器的安裝

    相信有很多小伙伴還不會(huì)安裝Python解釋器,今天特地整理了本篇文章,文章有非常詳細(xì)的圖文示例,對(duì)不會(huì)安裝的小伙伴很有幫助,需要的朋友可以參考下
    2021-06-06
  • Python使用Socket(Https)Post登錄百度的實(shí)現(xiàn)代碼

    Python使用Socket(Https)Post登錄百度的實(shí)現(xiàn)代碼

    以前都是用一些高級(jí)模塊,封裝的比較好,今天嘗試使用socket模塊登錄百度,弄了半天才弄好,主要由于百度在登陸頁(yè)使用了https,我們需要對(duì)socket進(jìn)行一定處理
    2012-05-05
  • Python 中的 dataclass使用場(chǎng)景與代碼示例詳解

    Python 中的 dataclass使用場(chǎng)景與代碼示例詳解

    在Python中,dataclass是一個(gè)裝飾器,用于簡(jiǎn)化類(lèi)的定義,自動(dòng)生成初始化、比較等方法,適用于需要存儲(chǔ)數(shù)據(jù)的場(chǎng)景,通過(guò)示例展示了dataclass的基本用法,感興趣的朋友跟隨小編一起看看吧
    2024-09-09
  • django實(shí)現(xiàn)HttpResponse返回json數(shù)據(jù)為中文

    django實(shí)現(xiàn)HttpResponse返回json數(shù)據(jù)為中文

    這篇文章主要介紹了django實(shí)現(xiàn)HttpResponse返回json數(shù)據(jù)為中文,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-03-03
  • Python之site-packages目錄的位置

    Python之site-packages目錄的位置

    這篇文章主要介紹了Python之site-packages目錄的位置,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • 用python畫(huà)個(gè)奧運(yùn)五環(huán)(附完整代碼)

    用python畫(huà)個(gè)奧運(yùn)五環(huán)(附完整代碼)

    大家好,本篇文章主要講的是用python畫(huà)個(gè)奧運(yùn)五環(huán)(附完整代碼),感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下
    2022-01-01
  • python可視化分析的實(shí)現(xiàn)(matplotlib、seaborn、ggplot2)

    python可視化分析的實(shí)現(xiàn)(matplotlib、seaborn、ggplot2)

    這篇文章主要介紹了python可視化分析的實(shí)現(xiàn)(matplotlib、seaborn、ggplot2),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • Python字典dict常用內(nèi)置函數(shù)詳解

    Python字典dict常用內(nèi)置函數(shù)詳解

    這篇文章主要介紹了Python字典dict常用內(nèi)置函數(shù)詳解,dict是Python中的一種內(nèi)置數(shù)據(jù)類(lèi)型,它是一種鍵值對(duì)的集合,類(lèi)似于Java中的Map或其他語(yǔ)言中的字典,需要的朋友可以參考下
    2023-07-07
  • python 計(jì)算數(shù)據(jù)偏差和峰度的方法

    python 計(jì)算數(shù)據(jù)偏差和峰度的方法

    今天小編就為大家分享一篇python 計(jì)算數(shù)據(jù)偏差和峰度的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-06-06

最新評(píng)論

赤壁市| 雷山县| 永城市| 和顺县| 岳池县| 普兰县| 门源| 濉溪县| 九江市| 保定市| 大埔区| 洪江市| 辉县市| 赤峰市| 自贡市| 河北省| 井研县| 论坛| 容城县| 彰化县| 韶关市| 丰镇市| 霍山县| 尼勒克县| 巴林左旗| 金乡县| 武城县| 手游| 翁牛特旗| 夏邑县| 万年县| 夏河县| 河西区| 泰宁县| 陆良县| 定西市| 石渠县| 木兰县| 乌鲁木齐县| 砚山县| 澄迈县|