美文网首页
39. 边缘检测

39. 边缘检测

作者: 十里江城 | 来源:发表于2019-11-12 16:43 被阅读0次

本文解释Canny和sobel边缘检测算法。

1)Canny算法实现

步骤:

  • 读取灰度图
  • 高斯滤波
  • Canny算法
  • 显示边缘
import cv2
import numpy as np
import random

img = cv2.imread('face.jpg', 1) 
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# 模板大小:(3, 3)   (高斯模糊后图像质量降低)
imgG = cv2.GaussianBlur(gray, (3, 3), 0)

# 50 50 两个边缘门限
dst = cv2.Canny(img, 50, 50)

cv2.imshow('src', img)
cv2.imshow('img GaussianBlur', imgG)
cv2.imshow('dst', dst)
cv2.waitKey(0)

效果如下:

image.png

2)Sobel算法原理与实现

步骤:

  • 读取灰度图
  • 用Sobel算子模板卷积
  • 阈值判决
  • 显示边缘
import cv2
import numpy as np
import random
# 算法模块
import math

# 1 读取灰度图
img = cv2.imread('1.jpg', 1) 
imgInfo = img.shape
height = imgInfo[0]
width = imgInfo[1]
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) 

# 2 用算子模板进行卷积(算子: 函数到函数/值的映射)
dst = np.zeros((height, width, 1), np.uint8)
# 算子模板
# [1  2  1         [ 1 0 -1
# 0  0  0            2 0 -2
# -1 -2 -1]          1 0 -1]
for i in range(0, height - 2):
    for j in range(0, width - 2):
        # 图像卷积
        # y方向梯度
        gy = gray[i, j] * 1 + gray[i, j + 1] * 2 + gray[i, j + 2] * 1 + gray[i + 2, j] * (-1) + gray[i + 2, j + 1] * (-2) + gray[i + 2, j + 2] * (-1)
        # x方向梯度
        gx = gray[i, j] * 1 + gray[i, j + 1] * 0 + gray[i, j + 2] * (-1) + gray[i + 1, j] * 2 + gray[i + 1, j + 1] * 0 + gray[i + 1, j + 1] * (-2) + gray[i + 2, j] * 1 + gray[i + 2, j + 1] * 0 + gray[i + 2, j + 2] * (-1)
        grad = math.sqrt(gx * gx + gy * gy)
        
        # 3 阈值判决
        if grad > 50:
            dst[i, j] = 255
        else:
            dst[i, j] = 0
# 4 显示边缘
cv2.imshow('src', img)
cv2.imshow('dst', dst)
cv2.waitKey(0)

效果如下:


image.png

相关文章

  • 39. 边缘检测

    本文解释Canny和sobel边缘检测算法。 1)Canny算法实现 步骤: 读取灰度图 高斯滤波 Canny算法...

  • opencv+python学习记录(二十)边缘检测

    边缘检测包含:Prewitt边缘检测、Sobel边缘检测、Scharr算子、Canny边缘检测、Laplacian...

  • Canny边缘检测---OpenCV-Python开发指南(22

    什么是Canny边缘检测 Canny边缘检测是一种使用多级边缘检测算法检测边缘的方法。该方法由John F. Ca...

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

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

  • Task06 边缘检测

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

  • cv领域之边缘检测技术学习

    一、边缘检测简单介绍 边缘检测是图像分割中最常见的操作之一,一般提到边缘可能有三个概念: 边缘检测:定位边缘像素的...

  • 图像轮廓(1)

    边缘检测虽然能够检测出边缘,但是边缘不是连续的,检测到的边缘不是一个整体。图像轮廓是指将边缘连接起来形成一个整体 ...

  • 数字图像 - 边缘检测原理 - Sobel, Laplace,

    先来看张图,左边是原图,右边是边缘检测后的图,边缘检测就是检测出图像上的边缘信息,右图用白色的程度表示边缘的深浅。...

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

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

  • 边缘检测

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

网友评论

      本文标题:39. 边缘检测

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