国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【OpenCV實(shí)現(xiàn)圖像梯度,Canny邊緣檢測(cè)】

這篇具有很好參考價(jià)值的文章主要介紹了【OpenCV實(shí)現(xiàn)圖像梯度,Canny邊緣檢測(cè)】。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

概要

OpenCV中,可以使用各種函數(shù)實(shí)現(xiàn)圖像梯度和Canny邊緣檢測(cè),這些操作對(duì)于圖像處理和分析非常重要。

圖像梯度通常用于尋找圖像中的邊緣和輪廓。在OpenCV中,可以使用cv2.Sobel()函數(shù)計(jì)算圖像的梯度,該函數(shù)可以計(jì)算圖像在水平和垂直方向上的梯度。梯度的方向和大小可以幫助理解圖像中的邊緣信息。

Canny邊緣檢測(cè)是一種經(jīng)典的邊緣檢測(cè)算法,它通過(guò)多個(gè)步驟來(lái)檢測(cè)圖像中的邊緣。首先,Canny算法使用Sobel算子計(jì)算圖像的梯度。然后,它通過(guò)非極大值抑制(Non-Maximum Suppression)來(lái)細(xì)化邊緣。接著,Canny算法使用雙閾值(Double Thresholding)來(lái)檢測(cè)強(qiáng)邊緣和弱邊緣,并通過(guò)連接強(qiáng)邊緣來(lái)得到最終的邊緣圖像。Canny邊緣檢測(cè)在圖像處理中被廣泛應(yīng)用,因?yàn)樗軌驕?zhǔn)確地檢測(cè)出圖像中的邊緣。

在OpenCV中,可以使用cv2.Sobel()函數(shù)計(jì)算圖像的梯度,而Canny邊緣檢測(cè)則可以通過(guò)cv2.Canny()函數(shù)實(shí)現(xiàn)。通過(guò)這些函數(shù),可以方便地在OpenCV中實(shí)現(xiàn)圖像梯度和Canny邊緣檢測(cè),進(jìn)而進(jìn)行各種圖像分析和處理任務(wù)。

圖像梯度

尋找圖像梯度,邊緣等等。
函數(shù):cv.Sobel(), cv.Scharr(), cvLaplacian() 等等。

Sobel和Scharr導(dǎo)數(shù):
Sobel算子是一種結(jié)合了高斯平滑和微分操作的濾波器,因此它對(duì)圖像中的噪聲具有較好的抵抗能力。使用Sobel算子時(shí),可以指定所需導(dǎo)數(shù)的方向,通過(guò)參數(shù)yorder和xorder來(lái)確定是垂直方向還是水平方向的導(dǎo)數(shù)。此外,還可以通過(guò)參數(shù)ksize指定核(kernel)的大小。當(dāng)ksize設(shè)為-1時(shí),OpenCV會(huì)使用3×3的Scharr濾波器,其結(jié)果通常比3×3的Sobel濾波器更為精確。

拉普拉斯導(dǎo)數(shù)
它計(jì)算了由關(guān)系式給出的圖像的拉普拉斯算子,其中關(guān)系式為
【OpenCV實(shí)現(xiàn)圖像梯度,Canny邊緣檢測(cè)】,python深度學(xué)習(xí),# 學(xué)習(xí)筆記,opencv,opencv,人工智能,計(jì)算機(jī)視覺(jué),python,圖像處理
其中每一個(gè)導(dǎo)數(shù)都是用 Sobel 導(dǎo)數(shù)找到的。如果 ksize = -1,濾波器會(huì)使用下面這個(gè)內(nèi)核。

【OpenCV實(shí)現(xiàn)圖像梯度,Canny邊緣檢測(cè)】,python深度學(xué)習(xí),# 學(xué)習(xí)筆記,opencv,opencv,人工智能,計(jì)算機(jī)視覺(jué),python,圖像處理

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

# 讀取圖像
img = cv.imread('dave.jpg', 0)

# 計(jì)算拉普拉斯邊緣
laplacian = cv.Laplacian(img, cv.CV_64F)

# 計(jì)算Sobel邊緣(x和y方向)
sobelx = cv.Sobel(img, cv.CV_64F, 1, 0, ksize=5)
sobely = cv.Sobel(img, cv.CV_64F, 0, 1, ksize=5)

# 繪制原始圖像
plt.subplot(2, 2, 1), plt.imshow(img, cmap='gray')
plt.title('Original'), plt.xticks([]), plt.yticks([])

# 繪制拉普拉斯邊緣圖像
plt.subplot(2, 2, 2), plt.imshow(laplacian, cmap='gray')
plt.title('Laplacian'), plt.xticks([]), plt.yticks([])

# 繪制Sobel X邊緣圖像
plt.subplot(2, 2, 3), plt.imshow(sobelx, cmap='gray')
plt.title('Sobel X'), plt.xticks([]), plt.yticks([])

# 繪制Sobel Y邊緣圖像
plt.subplot(2, 2, 4), plt.imshow(sobely, cmap='gray')
plt.title('Sobel Y'), plt.xticks([]), plt.yticks([])

# 顯示圖像
plt.show()

【OpenCV實(shí)現(xiàn)圖像梯度,Canny邊緣檢測(cè)】,python深度學(xué)習(xí),# 學(xué)習(xí)筆記,opencv,opencv,人工智能,計(jì)算機(jī)視覺(jué),python,圖像處理
在我們的最后一個(gè)例子中,我們使用了Sobel濾波器來(lái)檢測(cè)圖像中的邊緣。然而,當(dāng)我們將輸出數(shù)據(jù)類(lèi)型轉(zhuǎn)換為cv.CV_8U或者np.uint8時(shí),存在一個(gè)小問(wèn)題。在圖像中,從黑色到白色的過(guò)渡被視為正斜率(它具有正值),而從白色到黑色的過(guò)渡被視為負(fù)斜率(它具有負(fù)值)。因此,當(dāng)我們將數(shù)據(jù)類(lèi)型轉(zhuǎn)換為np.uint8時(shí),所有負(fù)斜率都被截?cái)酁?,也就是說(shuō),我們會(huì)錯(cuò)過(guò)所有負(fù)斜率對(duì)應(yīng)的邊緣。

如果我們希望找到所有的邊緣,更好的方法是將輸出的數(shù)據(jù)類(lèi)型保持在一個(gè)更高的精度范圍內(nèi),例如cv.CV_16S、cv.CV_64F等,然后取其絕對(duì)值,最后再轉(zhuǎn)換回cv.CV_8U類(lèi)型。下面的代碼演示了這個(gè)過(guò)程,特別是在處理水平Sobel濾波器時(shí),以及結(jié)果的差異。

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

# 讀取灰度圖像
img = cv.imread('img.png', 0)

# 使用Sobel濾波器,輸出數(shù)據(jù)類(lèi)型為cv.CV_8U
sobelx8u = cv.Sobel(img, cv.CV_8U, 1, 0, ksize=5)

# 使用Sobel濾波器,輸出數(shù)據(jù)類(lèi)型為cv.CV_64F,然后取絕對(duì)值并轉(zhuǎn)換為cv.CV_8U
sobelx64f = cv.Sobel(img, cv.CV_64F, 1, 0, ksize=5)
abs_sobel64f = np.absolute(sobelx64f)
sobel_8u = np.uint8(abs_sobel64f)

# 顯示原始圖像、Sobel輸出(cv.CV_8U)和Sobel絕對(duì)值(cv.CV_64F)
plt.subplot(1, 3, 1), plt.imshow(img, cmap='gray')
plt.title('Original'), plt.xticks([]), plt.yticks([])
plt.subplot(1, 3, 2), plt.imshow(sobelx8u, cmap='gray')
plt.title('Sobel CV_8U'), plt.xticks([]), plt.yticks([])
plt.subplot(1, 3, 3), plt.imshow(sobel_8u, cmap='gray')
plt.title('Sobel abs(CV_64F)'), plt.xticks([]), plt.yticks([])

# 顯示圖像
plt.show()

【OpenCV實(shí)現(xiàn)圖像梯度,Canny邊緣檢測(cè)】,python深度學(xué)習(xí),# 學(xué)習(xí)筆記,opencv,opencv,人工智能,計(jì)算機(jī)視覺(jué),python,圖像處理

Canny邊緣檢測(cè)

Canny邊緣檢測(cè)的概念
OpenCV函數(shù):cv.Canny()

Canny邊緣檢測(cè)是一種廣泛應(yīng)用的邊緣檢測(cè)算法,由John F. Canny開(kāi)發(fā)而成。該算法包含多個(gè)階段,下面我們將詳細(xì)介紹每個(gè)階段的過(guò)程:

噪聲減少:
由于邊緣檢測(cè)對(duì)圖像中的噪聲非常敏感,第一步是通過(guò)一個(gè)5X5的高斯濾波器對(duì)圖像進(jìn)行平滑處理,以去除噪聲。

尋找圖像中的變化(梯度)強(qiáng)度:
接下來(lái),使用Sobel核在水平和垂直方向上對(duì)平滑后的圖像進(jìn)行濾波,得到水平方向($G_x$)和垂直方向($G_y$)的一階導(dǎo)數(shù)。通過(guò)這兩個(gè)導(dǎo)數(shù),我們可以計(jì)算每個(gè)像素點(diǎn)的邊緣梯度幅值和方向。梯度方向始終與邊緣垂直,通常近似為水平、垂直和兩個(gè)對(duì)角線(xiàn)方向中的一個(gè)。

【OpenCV實(shí)現(xiàn)圖像梯度,Canny邊緣檢測(cè)】,python深度學(xué)習(xí),# 學(xué)習(xí)筆記,opencv,opencv,人工智能,計(jì)算機(jī)視覺(jué),python,圖像處理

非極大值抑制:
在得到梯度大小和方向之后,在每個(gè)像素點(diǎn)上進(jìn)行全圖掃描。對(duì)于每個(gè)像素,檢查其梯度值是否在相鄰像素中是最大的。如果是,保留該值,否則將其置為0。這一步驟產(chǎn)生了一個(gè)"薄邊"的二值圖像。

【OpenCV實(shí)現(xiàn)圖像梯度,Canny邊緣檢測(cè)】,python深度學(xué)習(xí),# 學(xué)習(xí)筆記,opencv,opencv,人工智能,計(jì)算機(jī)視覺(jué),python,圖像處理
滯后閾值:
在此階段,我們需要確定哪些邊緣是真實(shí)的,哪些是噪聲或者假的。為此,我們使用兩個(gè)閾值,minVal(最小值)和maxVal(最大值)。所有強(qiáng)度大于maxVal的邊緣被視為真正的邊緣,低于minVal的被丟棄。介于兩者之間的邊緣會(huì)基于連通性來(lái)判斷是否為邊緣。如果它們與確定的邊緣相連,則保留,否則被拋棄。這一步驟也基于邊緣是長(zhǎng)線(xiàn)的假設(shè)來(lái)去除小的像素噪聲。
【OpenCV實(shí)現(xiàn)圖像梯度,Canny邊緣檢測(cè)】,python深度學(xué)習(xí),# 學(xué)習(xí)筆記,opencv,opencv,人工智能,計(jì)算機(jī)視覺(jué),python,圖像處理
邊緣 A 因?yàn)樵?maxVal 上面,所以是肯定的邊緣。盡管邊緣 C 的位置在 maxVal 下面,但是因?yàn)樗瓦吘?A 相連接,所以我們認(rèn)為它也是個(gè)有效邊緣,如此得到了一條完整的曲線(xiàn)。但是對(duì)于邊緣 B 來(lái)說(shuō),哪怕它在 minVal 上面,和邊緣 C 處在同一個(gè)區(qū)域上,可是它并不和任何一條有效邊緣連接,所以會(huì)被丟棄。所以,為了得到正確的結(jié)果,我們需要確定好 minVal 和 maxVal 的值。

最終,經(jīng)過(guò)這些步驟,我們就能得到一條完整的邊緣在圖像中。

OpenCV中的Canny邊緣檢測(cè)

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

# 讀取灰度圖像
img = cv.imread('img.png', 0)

# 使用Canny邊緣檢測(cè)算法,閾值設(shè)置為100和200
edges = cv.Canny(img, 100, 200)

# 顯示原始圖像和Canny邊緣檢測(cè)結(jié)果
plt.subplot(121), plt.imshow(img, cmap='gray')
plt.title('Original Image'), plt.xticks([]), plt.yticks([])

plt.subplot(122), plt.imshow(edges, cmap='gray')
plt.title('Edge Image'), plt.xticks([]), plt.yticks([])

plt.show()

【OpenCV實(shí)現(xiàn)圖像梯度,Canny邊緣檢測(cè)】,python深度學(xué)習(xí),# 學(xué)習(xí)筆記,opencv,opencv,人工智能,計(jì)算機(jī)視覺(jué),python,圖像處理

小結(jié)

圖像梯度:

OpenCV提供了多種方法來(lái)計(jì)算圖像的梯度,包括Sobel、Scharr和拉普拉斯濾波器。
Sobel算子是一種聯(lián)合高斯平滑和微分操作的濾波器,可以計(jì)算圖像在水平和垂直方向上的梯度。
使用Sobel算子時(shí),你可以指定所需導(dǎo)數(shù)的方向(水平或垂直)以及核的大小。
拉普拉斯濾波器用于計(jì)算圖像的拉普拉斯算子,通過(guò)將圖像的二階導(dǎo)數(shù)與Sobel導(dǎo)數(shù)相關(guān)聯(lián)來(lái)實(shí)現(xiàn)。

Canny邊緣檢測(cè):文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-732701.html

Canny邊緣檢測(cè)是一種多階段算法,用于檢測(cè)圖像中的邊緣。
第一階段是噪聲減少,通常通過(guò)應(yīng)用高斯濾波器來(lái)實(shí)現(xiàn),以平滑圖像并減少噪聲。
第二階段是計(jì)算圖像的梯度,通常使用Sobel濾波器,以獲得圖像的水平和垂直梯度。
接下來(lái)進(jìn)行非極大值抑制,以去除可能不構(gòu)成邊緣的像素,僅保留邊緣像素。
最后一個(gè)階段是滯后閾值,需要設(shè)置兩個(gè)閾值(minVal和maxVal),以確定哪些邊緣是真實(shí)的。根據(jù)這些閾值,邊緣可能被分類(lèi)為強(qiáng)邊緣、弱邊緣或非邊緣,并進(jìn)行相應(yīng)的處理。

到了這里,關(guān)于【OpenCV實(shí)現(xiàn)圖像梯度,Canny邊緣檢測(cè)】的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀(guān)點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • python --opencv圖像處理Canny算子邊緣檢測(cè)(Roberts算子、Prewitt算子、Sobel算子、Laplacian算子、Scharr 算子、 LOG 算子)

    python --opencv圖像處理Canny算子邊緣檢測(cè)(Roberts算子、Prewitt算子、Sobel算子、Laplacian算子、Scharr 算子、 LOG 算子)

    邊緣檢測(cè)是基于灰度突變來(lái)分割圖像的常用方法,其實(shí)質(zhì)是提取圖像中不連續(xù)部分的特征。目前常見(jiàn)邊緣檢測(cè)算子有差分算子、 Roberts 算子、 Sobel 算子、 Prewitt 算子、 Log 算子以及 Canny 算子等。 其中, Canny 算子是由計(jì)算機(jī)科學(xué)家 John F. Canny 于 1986 年提出的一種邊緣檢測(cè)算子

    2024年04月12日
    瀏覽(26)
  • Python Opencv實(shí)踐 - Canny邊緣檢測(cè)
  • python數(shù)字圖像處理基礎(chǔ)(五)——Canny邊緣檢測(cè)、圖像金字塔、圖像分割

    python數(shù)字圖像處理基礎(chǔ)(五)——Canny邊緣檢測(cè)、圖像金字塔、圖像分割

    梯度是什么? 梯度就是變化的最快的那個(gè)方向 edge = cv2.Canny(image, threshold1, threshold2[, edges[, apertureSize[, L2gradient ]]]) 第一個(gè)參數(shù)是需要處理的原圖像,該圖像必須為單通道的灰度圖; 第二個(gè)參數(shù)是閾值1; 第三個(gè)參數(shù)是閾值2。 原理步驟 1)使用高斯濾波器,以平滑圖像,濾除噪

    2024年01月18日
    瀏覽(28)
  • opencv基礎(chǔ)41-圖像梯度-sobel算子詳解cv2.Sobel()(邊緣檢測(cè)基礎(chǔ))

    opencv基礎(chǔ)41-圖像梯度-sobel算子詳解cv2.Sobel()(邊緣檢測(cè)基礎(chǔ))

    圖像梯度是用于描述圖像變化率的概念。在圖像處理中,梯度指的是圖像中每個(gè)像素的灰度值變化速率或方向。它常用于邊緣檢測(cè)和圖像特征提取。 一維圖像的梯度表示為函數(shù) f(x) 的導(dǎo)數(shù),而在二維圖像中,梯度是一個(gè)向量,包含兩個(gè)分量:水平方向和垂直方向的灰度變化率

    2024年02月14日
    瀏覽(25)
  • Canny算子邊緣檢測(cè)原理講解及其完整C語(yǔ)言實(shí)現(xiàn)(不使用opencv)

    Canny算子邊緣檢測(cè)原理講解及其完整C語(yǔ)言實(shí)現(xiàn)(不使用opencv)

    作者:隊(duì)友調(diào)車(chē)我吹空調(diào) 日期:2023/05/17 版權(quán):遵循CC 4.0 BY-SA版權(quán)協(xié)議 這里是后期的筆者,本文算是筆者的學(xué)習(xí)筆記,主要是在單片機(jī)中使用的,再者就是由于某些原因,筆者不想使用opencv,因此嘗試跟著原理手搓了這份代碼,筆者也盡力將代碼寫(xiě)到最簡(jiǎn)和效率最優(yōu)了。然而

    2024年04月27日
    瀏覽(21)
  • Python圖像銳化及邊緣檢測(cè)(Roberts、Prewitt、Sobel、Lapllacian、Canny、LOG)

    Python圖像銳化及邊緣檢測(cè)(Roberts、Prewitt、Sobel、Lapllacian、Canny、LOG)

    目錄 圖像銳化概述 算法方法介紹 ?代碼實(shí)現(xiàn) 效果展示 圖像銳化 (image sharpening) 是補(bǔ)償圖像的輪廓,增強(qiáng)圖像的邊緣及灰度跳變的部分,使圖像變得清晰,分為空間域處理和頻域處理兩類(lèi)。圖像銳化是為了突出圖像上地物的邊緣、輪廓,或某些線(xiàn)性目標(biāo)要素的特征。這種濾波

    2023年04月17日
    瀏覽(96)
  • python實(shí)現(xiàn)Canny算子邊緣檢測(cè)算法

    python實(shí)現(xiàn)Canny算子邊緣檢測(cè)算法

    ? ? 邊緣檢測(cè)是一種將圖片中關(guān)鍵信息表現(xiàn)出來(lái)的一種圖片技術(shù),它的結(jié)果并不是字面意思上的獲取圖片邊緣,而是將圖片有用的信息勾勒出來(lái),類(lèi)似素描的結(jié)果,但是已經(jīng)去掉了很多信息。如下所示,一張?jiān)嫉膱D片是這樣的: ? ?? ? ? 通過(guò)邊緣檢測(cè)算法,我們最終得到

    2024年02月08日
    瀏覽(22)
  • Canny 邊緣檢測(cè)算法-python實(shí)現(xiàn)(附代碼)

    Canny 邊緣檢測(cè)算法-python實(shí)現(xiàn)(附代碼)

    摘要 : Canny 邊緣檢測(cè)算法由計(jì)算機(jī)科學(xué)家 John F. Canny 于 1986 年提出的。其不僅提供了算法,還帶來(lái)了一套邊緣檢測(cè)的理論,分階段的解釋如何實(shí)現(xiàn)邊緣檢測(cè)。Canny 檢測(cè)算法包含下面幾個(gè)階段: 圖像灰度化 高斯模糊處理 圖像梯度、梯度幅值、梯度方向計(jì)算 NMS(非極大值抑制)

    2024年02月04日
    瀏覽(15)
  • 【OpenCV-Python】——邊緣和輪廓&Laplacian/Sobel/Canny邊緣檢測(cè)&查找/繪制輪廓及輪廓特征&霍夫直線(xiàn)/圓變換

    【OpenCV-Python】——邊緣和輪廓&Laplacian/Sobel/Canny邊緣檢測(cè)&查找/繪制輪廓及輪廓特征&霍夫直線(xiàn)/圓變換

    目錄 前言: 1、邊緣檢測(cè) 1.1 Laplacian邊緣檢測(cè) ?1.2 Sobel邊緣檢測(cè) ?1.3 Canny邊緣檢測(cè) 2、圖像輪廓 2.1 查找輪廓 ?2.2 繪制輪廓 2.3 輪廓特征 3、霍夫變換 3.1 霍夫直線(xiàn)變換 ?3.2 霍夫圓變換 總結(jié): 圖像的邊緣是指圖像中灰度值急劇變化的位置,邊緣檢測(cè)的目的是為了繪制邊緣線(xiàn)條。

    2024年01月23日
    瀏覽(22)
  • 圖像邊緣檢測(cè)(Canny)

    Canny檢測(cè)的流程 Canny檢測(cè)主要是用于邊緣檢測(cè) 1)使用高斯濾波器,以平滑圖像,濾除噪聲。 ? 2)計(jì)算圖像中每個(gè)像素點(diǎn)的梯度強(qiáng)度和方向。 3)應(yīng)用非極大值(Non-Maximum Suppression)抑制,以消除邊緣檢測(cè)帶來(lái)的雜散響應(yīng) 4)應(yīng)用雙閾值(Double-Threshold)檢測(cè)來(lái)確定真實(shí)的和潛在的邊緣 5)通

    2023年04月22日
    瀏覽(17)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包