文章目录
一、canny算法介绍
canny是边缘检测算法,在1986年提出。是一个很好的边缘检测器,也是常用的图像处理方法。
canny算法步骤:
1.高斯模糊:通过高斯模糊去掉噪声,因为canny是最噪声敏感的算法:GaussianBlur
2.灰度转换:cvtColor
3.计算梯度:Soble/Scharr
4.非最大信号压制:梯度——角度——根据角度将值量化
5.双阈值处理(高低阈值连接):输出二值图像
T1/T2为阈值,凡是高于T2的都保留,凡是小于T1的都抛弃,对于T1-T2之间的像素,如果从高于T2的像素出发大于T1而且相互连接的都保留。最终得到一个输出二值图像。推荐的高低阈值比值为T2:T1=3:1/3:2其中T2为高阈值,T1为低阈值。
二、实战
import cv2 as cv
import numpy as np
from matplotlib import pyplot as plt
'''canny边缘提取'''
def canny_demo(image):
# 1.高斯模糊:最后两个参数给定一个就可以自动求取另一个,所以只给其中一个赋值就可以
blur=cv.GaussianBlur(image,(3,3),0)
#2.灰度处理
gray=cv.cvtColor(blur,cv.COLOR_BGR2GRAY)
#3.求取梯度,也可以不用梯度,直接将灰度图传入cv.canny
grad_x=cv.Sobel(gray,cv.CV_16SC1,1,0)
grad_y = cv.Sobel(gray, cv.CV_16SC1, 0, 1)
#4.求边缘
edge_output=cv.Canny(grad_x,grad_y,50,150)#参数:x梯度,y梯度 ,低阈值,高阈值
cv.imshow('canny-demo',edge_output)
dst=cv.bitwise_and(image,image,mask=edge_output)
cv.imshow('color edge',dst)
img=cv.imread(r'D:\Project\Opencv\Learning01\fang.png')
cv.imshow('origin',img)
canny_demo(img)
cv.waitKey(0)