1. 程式人生 > >python opncv Canny邊緣檢測

python opncv Canny邊緣檢測

# Canny 邊緣檢測是一個多步驟的演算法。


# Canny邊緣檢測: 
# OpenCV-Python中Canny函式的原型為: 
# edge = cv2.Canny(image, threshold1, threshold2[, edges[, apertureSize[, L2gradient ]]]) 
 
# 必要引數: 
# 第一個引數是需要處理的原影象,該影象必須為單通道的灰度圖; 
# 第二個引數是閾值1; 
# 第三個引數是閾值2。 
 
# 其中較大的閾值2用於檢測影象中明顯的邊緣,但一般情況下檢測的效果不會那麼完美 
# ,邊緣檢測出來是斷斷續續的。所以這時候用較小的第一個閾 
# 值用於將這些間斷的邊緣連線起來。 # 可選引數中apertureSize就是Sobel運算元的大小。而L2gradient引數是一個布林值, # 如果為真,則使用更精確的L2範數進行計算(即兩個方向的倒數的平方和再開放) # ,否則使用L1範數(直接將兩個方向導數的絕對值相加)。 # 函式返回一副二值圖,其中包含檢測出的邊緣。
import cv2
import numpy as np
from matplotlib import pyplot as plt

img = cv2.imread('touxiang.jpg',0)
# img=cv2.GaussianBlur(img,(3,3),0) 
edges = cv2.Canny(img,100,250) cv2.imshow('edges',edges) cv2.waitKey(0) cv2.destroyAllWindows()
''''' 
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) #邊緣檢測 # just add some colours to edges from original image. dst = cv2.bitwise_and(img,img,mask = detected_edges) #用原始顏色新增到檢測的邊緣上 cv2.imshow('canny demo',dst) lowThreshold = 0 max_lowThreshold = 100 ratio = 3 kernel_size = 3 img = cv2.imread('touxiang.jpg') gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) #轉換彩色影象為灰度圖 cv2.namedWindow('canny demo') #設定調節槓, ''''' 下面是第二個函式,cv2.createTrackbar() 共有5個引數,其實這五個引數看變數名就大概能知道是什麼意思了 第一個引數,是這個trackbar物件的名字 第二個引數,是這個trackbar物件所在面板的名字 第三個引數,是這個trackbar的預設值,也是調節的物件 第四個引數,是這個trackbar上調節的範圍(0~count) 第五個引數,是調節trackbar時呼叫的回撥函式名 ''' cv2.createTrackbar('Min threshold','canny demo',lowThreshold, max_lowThreshold, CannyThreshold) CannyThreshold(0) # initialization if cv2.waitKey(0) == 27: #wait for ESC key to exit cv2 cv2.destroyAllWindows()