Opencv Canny边缘检测

@fuxianjun

        本节对Canny边缘检测的步骤进行简单的介绍,希望帮助大家理解canny边缘检测的原理。

1) 使用高斯滤波器,以平滑图像,滤除噪声。

2) 计算图像中每个像素点的梯度强度和方向。

3) 应用非极大值(Non-Maximum Suppression)抑制,以消除边缘检测带来的杂散响应。

4) 应用双阈值(Double-Threshold)检测来确定真实的和潜在的边缘。

5) 通过抑制孤立的弱边缘最终完成边缘检测。

Canny函数及使用

OpenCV提供了函数cv2.Canny0来实现Canny边缘检测,其语法形式如下:

●edges = cv2. Cannedges为计算得到的边缘图像。

●image为8位输入图像。

●thresholdl 表示处理过程中的第一- 个阈值。

●threshold2 表示处理过程中的第二个阈值。

●apertureSize表示Sobel算子的孔径大小。

●L2gradient 为计算图像梯度幅度( gradient magnitude)的标识。其默认值为False。如果 为True,则使用更精确的L2范数进行计算( 即两个方向的导数的平方和再开方),否则使用L1范数(直接将两个方向导数的绝对值相加)。y( image, threshold1, threshold2[, apertureSize[, L2gradient1])

Opencv Canny边缘检测_第1张图片

运用Canny

实战:车道检测

import cv2
import numpy as np 
def canny(image):    
    gray = cv2.cvtColor(image,cv2.COLOR_RGB2GRAY)    
    blur = cv2.GaussianBlur(gray,(5,5),0)#降低噪点    
    canny = cv2.Canny(blur,50,150)    
    return canny 
def region_of_interest(image):#应用遮罩    
    height = image.shape[0]    
    ploygons = np.array([[(200,height),(1100,height),(550,250)]])   
    mask = np.zeros_like(image)    
    cv2.fillPoly(mask,ploygons,255)    
    masked_image = cv2.bitwise_and(image,mask)#通过bitwise_and对两个图像的每一个像素做与运算,来将遮罩应用图像    
    return masked_image 
image = cv2.imread('test_image.jpg')
lane_image = np.copy(image)
canny=canny(lane_image)
cv2.imshow('canny',canny)
cv2.imshow('region_of_interest(canny)',region_of_interest(canny)) 
cv2.waitKey(0)

你可能感兴趣的:(Opencv,python)