OpenCV图像处理(十四)---边缘检测

       热力学第二定律(second law of thermodynamics),热力学基本定律之一,克劳修斯表述为:热量不能自发地从低温物体转移到高温物体。开尔文表述为:不可能从单一热源取热使之完全转换为有用的功而不产生其他影响。熵增原理:不可逆热力过程中熵的微增量总是大于零。在自然过程中,一个孤立系统的总混乱度(即“熵”)不会减小。                                                            

科普

知识

前言

     五一到了,大家放松的同时不要忘记学习哦。在上一期的文章中,我们学习了图像的滤波知识,了解到滤波的作用之一就是降噪,因此,滤波成为了众多图像处理任务中的首要操作,大家切记哦,今天,我们继续来学习图像的新知识--边缘检测。

一、边缘检测

1.边缘检测简介

     边缘检测是图像处理和计算机视觉中的基本问题,边缘检测的目的是标识数字图像中亮度变化明显的点。图像属性中的显著变化通常反映了属性的重要事件和变化。这些包括(i)深度上的不连续、(ii)表面方向不连续、(iii)物质属性变化和(iv)场景照明变化。边缘检测是图像处理和计算机视觉中,尤其是特征提取中的一个研究领域。

 以上用一句话总结:边缘检测实际就是检测图像中亮度变化有区别或者较大的地方,实际效果表现为图像中的轮廓检测。

1.1 原始图片

(各式各样的水果)

(晨间的森林,也是小编向往的地方之一)

1.2 代码实践

(1)Canny边缘检测

      Canny边缘检测是一种非常流行的边缘检测算法,它是一个多阶段的算法,即由图像降噪,计算图像梯度,非极大值抑制 ,阈值筛选是个步骤构成,换句话说,只要使用这个算法,我们就会经过四个处理步骤,幸运的是,OpenCV已经为我们实现了这个函数,只要调用就可以了,一起来看看吧!

(2)Sobel边缘检测

       主要用作边缘检测,在技术上,它是一离散性差分算子,用来运算图像亮度函数的灰度之近似值。在图像的任何一点使用此算子,将会产生对应的灰度矢量或是其法矢量。

# -*- coding:utf8 -*-
import cv2


# Canny边缘检测算子
src_image = cv2.imread('img1.jpg')
# 读取图片转换为为灰度图像
image_gray = cv2.cvtColor(src_image,cv2.COLOR_BGR2GRAY)
# 边缘检测之前先进行滤波,降噪,滤波方式为高斯滤波
filter_image = cv2.GaussianBlur(image_gray, (5, 5), 0)  
# 调用canny算子,进行边缘检测 48,170是一个调整范围,根据实际情况选用
canny_image = cv2.Canny(filter_image, 48, 170)  # 48是最小阈值,170是最大阈值






# Sobel边缘检测算子,之前的文章讲到过,这里拿来直接使用
x = cv2.Sobel(image_gray, cv2.CV_16S, 1, 0)
y = cv2.Sobel(image_gray, cv2.CV_16S, 0, 1)
Scale_absX = cv2.convertScaleAbs(x)  
Scale_absY = cv2.convertScaleAbs(y)
# 此处采用图像融合函数得到sobel检测结果
Sobel_image = cv2.addWeighted(Scale_absX, 0.5, Scale_absY, 0.5, 0)




cv2.imshow('src_image', src_image)
cv2.imshow('canny_image', canny_image)
cv2.imshow('Sobel_image', Sobel_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

代码解读:从第一段代码中,我们可以看到,代码首先对输入的图像进行了高斯滤波,然后调用了canny算子进行边缘检测,cv2.Canny()函数通常为三个参数(也有其他参数,较少使用哦),第一个为需要进行边缘检测的图像,第二三个参数分别为检测的上下限(最小阈值,最大阈值)。

1.3 效果展示

(展示结果1)

(展示结果2)

结果分析:可以看到,上图中sobel算子检测结果更接近于实际感觉,canny算子更清晰,实际用到的时候再来具体考虑,一般优先使用canny算子。

结语

今天的分享结束了,我们主要学习了canny和sobel算子的使用,大家一定要去实践哦!

      祝大家五一劳动节快乐!

编辑:玥怡居士|审核:小圈圈居士

往期精彩回顾

OpenCV图像处理(十三)---图像滤波

OpenCV图像处理(十二)---图像阈值化

OpenCV图像处理(十一)---图像梯度

扫码关注更多精彩

点亮在看,你最好看!

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值