python opncv Canny邊緣檢測
阿新 • • 發佈:2018-11-27
# 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()