91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python中怎么實現Opencv cv2.Canny()邊緣檢測

發布時間:2021-07-13 10:32:14 來源:億速云 閱讀:245 作者:Leah 欄目:開發技術

這期內容當中小編將會給大家帶來有關Python中怎么實現Opencv cv2.Canny()邊緣檢測,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。


1. 效果圖

原始圖 VS Canny檢測效果圖如下:

Python中怎么實現Opencv cv2.Canny()邊緣檢測

2. 源碼

# Canny邊緣檢測是一種流行的邊緣檢測算法。它是由約翰F開發的,是一個多階段的算法;
# Canny邊緣檢測大致包含4個步驟:
# 
# 1.降噪(使用高斯濾波去除高頻噪聲);
# 2. 計算邊緣梯度和方向(SobelX、SobleY核在水平方向和垂直方向對平滑后的圖像進行濾波,找到每個像素的邊緣梯度和方向);
# 3. 非最大抑制(在得到梯度大小和方向后,對圖像進行全掃描,去除任何不需要的像素,這些像素可能不構成邊緣。檢查像素是否在其梯度方向的鄰域中是局部最大值。否則,將被抑制(歸零)。簡而言之,得到的結果是一個具有“細邊”的二值圖像。
# 4. 滯后閾值(決定哪些邊是真正的邊,哪些不是。為此需要兩個閾值minVal和maxVal,任何強度梯度大于maxVal的邊都肯定是邊,小于minVal的邊肯定是非邊,因此丟棄。位于這兩個閾值之間的邊根據其連通性被分類為邊或非邊。如果它們連接到“確定邊緣”像素,則它們被視為邊緣的一部分。否則,它們也會被丟棄。)
# 
# 選擇滯后閾值minVal和maxVal是得到正確結果的關鍵。
import cv2
from matplotlib import pyplot as plt

img = cv2.imread('zly.jpg', 0)
edges = cv2.Canny(img, 80, 200)

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()

參考 https://docs.opencv.org/3.0-beta/doc/py_tutorials/py_imgproc/py_canny/py_canny.html#canny

補充:OpenCV-Python 中 Canny() 參數

步驟:

  • 彩色圖像轉換為灰度圖像(以灰度圖或者單通道圖讀入)

  • 對圖像進行高斯模糊(去噪)

  • 計算圖像梯度,根據梯度計算圖像邊緣幅值與角度

  • 沿梯度方向進行非極大值抑制(邊緣細化)

  • 雙閾值邊緣連接處理

  • 二值化圖像輸出結果

"""
cv2.Canny(image,            # 輸入原圖(必須為單通道圖)
          threshold1, 
          threshold2,       # 較大的閾值2用于檢測圖像中明顯的邊緣
          [, edges[, 
          apertureSize[,    # apertureSize:Sobel算子的大小
          L2gradient ]]])   # 參數(布爾值):
                              true: 使用更精確的L2范數進行計算(即兩個方向的倒數的平方和再開放),
                              false:使用L1范數(直接將兩個方向導數的絕對值相加)。
"""

import cv2
import numpy as np  
 
original_img = cv2.imread("qingwen.png", 0)

# canny(): 邊緣檢測
img1 = cv2.GaussianBlur(original_img,(3,3),0)
canny = cv2.Canny(img1, 50, 150)

# 形態學:邊緣檢測
_,Thr_img = cv2.threshold(original_img,210,255,cv2.THRESH_BINARY)#設定紅色通道閾值210(閾值影響梯度運算效果)
kernel = cv2.getStructuringElement(cv2.MORPH_RECT,(5,5))         #定義矩形結構元素
gradient = cv2.morphologyEx(Thr_img, cv2.MORPH_GRADIENT, kernel) #梯度

cv2.imshow("original_img", original_img) 
cv2.imshow("gradient", gradient) 
cv2.imshow('Canny', canny)

cv2.waitKey(0)
cv2.destroyAllWindows()

 Python中怎么實現Opencv cv2.Canny()邊緣檢測

可調整閾值大小的程序

import cv2
import numpy as np
 
def CannyThreshold(lowThreshold):
    detected_edges = cv2.GaussianBlur(gray,(3,3),0)
    detected_edges = cv2.Canny(detected_edges,
                               lowThreshold,
                               lowThreshold*ratio,
                               apertureSize = kernel_size)
    dst = cv2.bitwise_and(img,img,mask = detected_edges)  # just add some colours to edges from original image.
    cv2.imshow('canny demo',dst)

lowThreshold = 0
max_lowThreshold = 100
ratio = 3
kernel_size = 3
 
img = cv2.imread('qingwen.png')
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
 
cv2.namedWindow('canny demo')
 
cv2.createTrackbar('Min threshold','canny demo',lowThreshold, max_lowThreshold, CannyThreshold)
 
CannyThreshold(0)  # initialization
if cv2.waitKey(0) == 27:
    cv2.destroyAllWindows()

Python中怎么實現Opencv cv2.Canny()邊緣檢測 

上述就是小編為大家分享的Python中怎么實現Opencv cv2.Canny()邊緣檢測了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

客服| 通州市| 阳原县| 新泰市| 鹿邑县| 南宁市| 屯昌县| 仲巴县| 津市市| 辽源市| 留坝县| 从化市| 山丹县| 固始县| 津南区| 松溪县| 璧山县| 时尚| 阳曲县| 华坪县| 文化| 双江| 伊通| 青河县| 淮安市| 湘西| 什邡市| 弥渡县| 京山县| 海南省| 肥城市| 西乌珠穆沁旗| 天门市| 江都市| 陵水| 文昌市| 平乡县| 金昌市| 九江市| 张掖市| 舟曲县|