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

Python+OpenCV實現(xiàn)邊緣檢測與角點檢測詳解

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

一、邊緣檢測

Sobel與Canny邊緣檢測代碼如下所示

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)     # 對x求一階導(dǎo)數(shù)
y = cv.Sobel(grayImage, cv.CV_16S, 0, 1)    # 對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、邊緣檢測結(jié)果

邊緣檢測運行結(jié)果結(jié)果如下所示

Sobel與Canny邊緣檢測的優(yōu)缺點

sobel:

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

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

canny:

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

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

二、角點檢測

Susan與Harris角點檢測代碼如下所示

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角點檢測算法,對圖像進行處理
    """
    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):     # 利用圓形模板遍歷圖像,計算每點處的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:             # 計算相似度
                        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ù)用于對角點處理后的圖像,進行非極大值抑制修正
    """

    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:       # 判斷是否是周圍8個點中最大的值,是則保留
                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ào)用susan角點檢測算法的代碼如下所示

# 調(diào)用susan角點檢測算法
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、角點檢測結(jié)果

角點檢測運行結(jié)果結(jié)果如下所示

Susan與Harris角點檢測算子的優(yōu)缺點

Harris:

Harris優(yōu)點:

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

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

Harris缺點:

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

2 提取的角點是像素級的

Susan:

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

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

相關(guān)文章

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

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

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

    Python新手入門之解釋器的安裝

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

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

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

    Python 中的 dataclass使用場景與代碼示例詳解

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

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

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

    Python之site-packages目錄的位置

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

    用python畫個奧運五環(huán)(附完整代碼)

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

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

    這篇文章主要介紹了python可視化分析的實現(xiàn)(matplotlib、seaborn、ggplot2),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(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ù)類型,它是一種鍵值對的集合,類似于Java中的Map或其他語言中的字典,需要的朋友可以參考下
    2023-07-07
  • python 計算數(shù)據(jù)偏差和峰度的方法

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

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

最新評論

商城县| 尤溪县| 沙湾县| 台北市| 搜索| 宁乡县| 岑溪市| 临高县| 呼图壁县| 时尚| 西充县| 罗江县| 峡江县| 安丘市| 忻城县| 清新县| 全州县| 丹凤县| 崇明县| 霍州市| 德庆县| 大安市| 正镶白旗| 普宁市| 铜梁县| 昌江| 通化市| 扎赉特旗| 罗定市| 山阳县| 乐业县| 三台县| 牟定县| 玉田县| 旅游| 恭城| 长子县| 金湖县| 宣武区| 合阳县| 精河县|