美文网首页
opencv+python -- 图像边缘检测

opencv+python -- 图像边缘检测

作者: 小兵12138 | 来源:发表于2019-04-15 08:59 被阅读0次

图像的边缘检测的原理是检测出图像中所有灰度值变化较大的点,而且这些点连接起来就构成了若干线条,这些线条就可以称为图像的边缘。

算法步骤

1、高斯模糊
2、灰度转换
3、计算梯度
4、非最大信号抑制
5、高低阈值输出二值图像

Code

import cv2 as cv
import numpy


def edge_demo(image):
    blurred = cv.GaussianBlur(image, (3, 3), 0)
    gray = cv.cvtColor(blurred, cv.COLOR_BGR2GRAY)
    # X gradient
    x_grad = cv.Sobel(gray, cv.CV_16SC1, 1, 0)
    # Y gradient
    y_grad = cv.Sobel(gray, cv.CV_16SC1, 0, 1)
    edge_output = cv.Canny(x_grad, y_grad, 50, 150)
    cv.imshow("Canny Edge", edge_output)

    dst = cv.bitwise_and(image, image, mask=edge_output)
    cv.imshow("Color edge", dst)


src = cv.imread("./data/lena.jpg", cv.IMREAD_COLOR)
cv.namedWindow("lena", cv.WINDOW_AUTOSIZE)
cv.imshow("lena", src)
edge_demo(src)
cv.waitKey(0)
cv.destroyAllWindows()

API

OpenCV的Canny函数用于在图像中查找边缘,其函数原型有两种:

①直接调用Canny算法在单通道灰度图像中查找边缘,

其函数原型为:Canny(image, threshold1, threshold2[, edges[, apertureSize[, L2gradient]]]) -> edges

image参数表示8位输入图像。

threshold1参数表示设置的低阈值。

threshold2参数表示设置的高阈值,一般设定为低阈值的3倍 (根据Canny算法的推荐)。

edges参数表示输出边缘图像,单通道8位图像。

apertureSize参数表示Sobel算子的大小。

L2gradient参数表示一个布尔值,如果为真,则使用更精确的L2范数进行计算(即两个方向的倒数的平方和再开方),否则使用L1范数(直接将两个方向导数的绝对值相加)。

②使用带自定义图像渐变的Canny算法在图像中查找边缘,

其函数原型为:Canny(dx, dy, threshold1, threshold2[, edges[, L2gradient]]) -> edges

dx参数表示输入图像的x导数(x导数满足16位,选择CV_16SC1或CV_16SC3)

dy参数表示输入图像的y导数(y导数满足16位,选择CV_16SC1或CV_16SC3)。

threshold1参数表示设置的低阈值。

threshold2参数表示设置的高阈值,一般设定为低阈值的3倍 (根据Canny算法的推荐)。

edges参数表示输出边缘图像,单通道8位图像。

L2gradient参数表示L2gradient参数表示一个布尔值,如果为真,则使用更精确的L2范数进行计算(即两个方向的倒数的平方和再开方),否则使用L1范数(直接将两个方向导数的绝对值相加)。

参考:
Canny算子原理:https://www.cnblogs.com/techyan1990/p/7291771.html

相关文章

  • opencv+python -- 图像边缘检测

    图像的边缘检测的原理是检测出图像中所有灰度值变化较大的点,而且这些点连接起来就构成了若干线条,这些线条就可以称为图...

  • Opencv第三课---边缘检测

    边缘检测 边缘检测是图像领域非常重要的一种处理手段,要理解边缘检测,首先要理解什么是边缘。边缘是图像局部强度具有非...

  • OpenCV+Python边缘检测

    Sobel算子 sobel算子计算的是图像的一阶梯度。灰度值变化越快的地方,梯度越大,如下图所示。 使用Sobel...

  • 边缘检测之孤立点检测及Python实现

    1 边缘检测背景知识 边缘即指图像中连接在一起的像素值发生突变的像素点的集合,故边缘检测则为检测出图像中所有的边缘...

  • Task06 边缘检测

    6.1 简介 6.1.1 什么是边缘? 边缘是图像强度函数快速变化的地方 6.1.2 如何检测边缘? 为了检测边缘...

  • 转《canny边缘检测算法》

    转自Canny边缘检测算法的实现 图像边缘信息主要集中在高频段,通常说图像锐化或检测边缘,实质就是高频滤波。我们知...

  • 边缘检测

    边缘表示了一个图像的重要信息,hin重要 边缘检测目标:确定图像中突然变化的部分为啥边缘检测:后续可以提取信息,识...

  • 边缘检测

    1. 关于边缘模式的算法 边缘指的是图像内出现的明部和暗部的边界。边缘检测则是通过图像处理检测出该浓度变化的边界。...

  • 【Unity Shader入门精要学习】高级(二)

    屏幕后处理效果 边缘检测 边缘检测的原理是利用一些边缘检测算子对图像进行卷积(convolution)操作 一、卷...

  • C#:Canny边缘检测

      边缘检测目的是在保留原有图像属性的情况下,显著减少图像的数据规模。  有多种算法可以进行边缘检测,虽然Cann...

网友评论

      本文标题:opencv+python -- 图像边缘检测

      本文链接:https://www.haomeiwen.com/subject/ljsywqtx.html