opencv(七)Canny边缘检测和图像轮廓检测

这篇具有很好参考价值的文章主要介绍了opencv(七)Canny边缘检测和图像轮廓检测。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


一、Canny边缘检测

1、检测步骤

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

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

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

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

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

  • cv2.Canny(img,minval,maxval)

    • minval:低阈值。如果检测到的像素点的梯度比低阈值还小那就舍弃掉
    • maxval:高阈值。如果检测到的像素点的梯度比高阈值还大则是边缘点保留下来
    • 在两者之间的像素点,如果其梯度有比maxval大的则是潜在的边缘保留下来,其余舍弃掉

2、代码展示

import cv2
import show_img as si
import numpy as np
import matplotlib.pyplot as plt

# 读取图片并灰度化处理
lena = cv2.imread('../data/lena.jpeg',cv2.IMREAD_GRAYSCALE)

# canny边缘检测
v1 = cv2.Canny(lena,80,150)
v2 = cv2.Canny(lena,50,100)

# 对比效果
res = np.hstack((v1,v2))
si.show_img('res',res)

3、效果对比图及说明

  • 先看原图

opencv canny 轮廓,opencv入门,opencv,人工智能,计算机视觉,python

  • 效果对比

  • 我们我们看到左边这张是低阈值设置的80,高阈值设置的150,经过检测后所呈现出来的边缘信息比右边设置的低阈值50,高阈值100呈现出来的信息要少,是因为低阈值设置的高了,有的潜在边缘在低阈值以下就给舍弃掉了,而且有的边缘信息达不到你设置的高阈值也就被舍弃掉了。这就是左边内容不太丰富的原因。故我们在进行边缘检测时双阈值设置的要差不多合理(可以反复进行尝试)。
    opencv canny 轮廓,opencv入门,opencv,人工智能,计算机视觉,python

二、图像轮廓检测

1、cv2.findContours(img,mode,method)

  • cv2.findContours(img,mode,method)
    • mode:轮廓检索模式
      • RETR_EXTERNAL:只检索最外面的轮廓;
      • RETR_LIST:检索所有的轮廓,并将其保存到一条链表当中;
      • RETR_CCOMP:检索所有的轮廓,并将他们组织为两层:顶层是各部分最外面的边界,第二层是空洞的边界;
      • RETR_TREE:检索所有的轮廓,并重构嵌套轮廓的整个层次;
    • method:轮廓逼近方法
      • CHAIN_APPROX_NONE:以Freeman链码的方式输出轮廓,所有其他方法输出多边形(顶点的序列)
      • CHAIN_APPROX_SIMPLE:压缩水平的、垂直的和斜的部分,也就是,函数只保留他们的终点部分
  • 之后我们用的时候主要用 RETR_TREE模式就可以了。
import cv2
import show_img as si
import numpy as np

# 读取图片
lena = cv2.imread('../data/lena.jpeg',cv2.IMREAD_GRAYSCALE)
# 进行阈值处理
ret,thresh = cv2.threshold(lena,127,255,cv2.THRESH_BINARY)
# si.show_img('thresh',thresh)

#轮廓检测
contours,hierarchy = cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_NONE)

# 绘制轮廓
# 传入绘制图像,轮廓,轮廓索引,颜色模式,线条厚度
# 注意需要copy,要不原图会变
draw_img = lena.copy()
res = cv2.drawContours(draw_img,contours,-1,(0,0,255),2)
# si.show_img('res',res)

#draw_img1 = lena.copy()
#res = cv2.drawContours(draw_img1,contours,0,(0,0,255),2)
# si.show_img('res',res)

2、效果展示

我们可以看到大致轮廓已经画出来了。

opencv canny 轮廓,opencv入门,opencv,人工智能,计算机视觉,python文章来源地址https://www.toymoban.com/news/detail-766844.html

到了这里,关于opencv(七)Canny边缘检测和图像轮廓检测的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • OpenCV 入门教程:Laplacian算子和Canny边缘检测

    边缘检测在图像处理和计算机视觉领域中起着重要的作用。 Laplacian 算子和 Canny 边缘检测是两种常用的边缘检测方法,它们能够帮助我们准确地检测图像中的边缘信息。 OpenCV 提供了这

    2024年02月13日
    浏览(9)
  • 我在Vscode学OpenCV 图像处理三(图像梯度--边缘检测【图像梯度、Sobel 算子、 Scharr 算子、 Laplacian 算子、Canny 边缘检测】)

    我在Vscode学OpenCV 图像处理三(图像梯度--边缘检测【图像梯度、Sobel 算子、 Scharr 算子、 Laplacian 算子、Canny 边缘检测】)

    这里需要区分开边缘检测和轮廓检测 边缘检测并非万能,边缘检测虽然能够检测出边缘,但边缘是不连续的,检测到的边缘并不是一个整体。图像轮廓是指将边缘连接起来形成的一个整体,用于后续的计算。 OpenCV 提供了查找图像轮廓的函数 cv2.findContours(),该函数能够查找图

    2024年02月04日
    浏览(13)
  • opencv(23) Canny边缘检测流程(Canny算子)

    opencv(23) Canny边缘检测流程(Canny算子)

    Canny 边缘检测算法 是 John F. Canny 于 1986年开发出来的一个多级边缘检测算法,也被很多人认为是边缘检测的 最优算法 , 最优边缘检测的三个主要评价标准是: 低错误率: 标识出尽可能多的实际边缘,同时尽可能的减少噪声产生的误报。 高定位性: 标识出的边缘要与图像中的实

    2024年04月11日
    浏览(15)
  • 图像边缘检测(Canny)

    Canny检测的流程 Canny检测主要是用于边缘检测 1)使用高斯滤波器,以平滑图像,滤除噪声。   2)计算图像中每个像素点的梯度强度和方向。 3)应用非极大值(Non-Maximum Suppression)抑制,以消除边缘检测带来的杂散响应 4)应用双阈值(Double-Threshold)检测来确定真实的和潜在的边缘 5)通

    2023年04月22日
    浏览(6)
  • OpenCV——Canny边缘检测算法

    OpenCV——Canny边缘检测算法

    图像分割是将数字图像细分为多个子区域的过程,在计算机视觉/机器视觉领域被广泛应用。它的目的是简化或改变图像的表示形式,以便更容易理解和分析。常见的图像分割方法包括阈值处理、聚类法、边缘检测和区域生长等。解决图像分割问题通常需要结合领域知识,以提

    2024年04月17日
    浏览(12)
  • opencv-Canny 边缘检测

    opencv-Canny 边缘检测

    Canny边缘检测是一种经典的图像边缘检测算法,它在图像中找到强度梯度的变化,从而 识别出图像中的边缘 。 Canny边缘检测的优点包括高灵敏度和低误检率。 在OpenCV中, cv2.Canny() 函数用于执行Canny边缘检测。 基本语法如下: 参数说明: image : 输入图像,通常为灰度图像。

    2024年02月22日
    浏览(13)
  • 【OpenCV】第十章: Canny边缘检测

    【OpenCV】第十章: Canny边缘检测

    第十章: Canny边缘检测 canny边缘检测是一种一阶微分算子检测算法,但为什么还要单独拿出来讲呢,因为它几乎是边缘检测算子中最优秀的边缘检测算子,你很难找到一种边缘检测算子能显著地比Canny算子做的更好。 Canny提出了边缘检测算子优劣评判的三条标准: 1、较高的检

    2024年02月03日
    浏览(8)
  • 图像边缘检测--(Sobel、Laplacian、Canny)

    1、图像中各种形状的检测是计算机视觉领域中非常常见的技术之一,特别是图像中直线的检测,圆的检测,图像边缘的检测等,下面将介绍如何快速检测图像边缘。 2、边缘是不同区域的分界线,是周围(局部)像素有显著变化的像素的集合,有幅值与方向两个属性。这个不

    2024年02月07日
    浏览(9)
  • Python Opencv实践 - Canny边缘检测

    Python Opencv实践 - Canny边缘检测

     

    2024年02月11日
    浏览(13)
  • python --opencv图像处理Canny算子边缘检测(Roberts算子、Prewitt算子、Sobel算子、Laplacian算子、Scharr 算子、 LOG 算子)

    python --opencv图像处理Canny算子边缘检测(Roberts算子、Prewitt算子、Sobel算子、Laplacian算子、Scharr 算子、 LOG 算子)

    边缘检测是基于灰度突变来分割图像的常用方法,其实质是提取图像中不连续部分的特征。目前常见边缘检测算子有差分算子、 Roberts 算子、 Sobel 算子、 Prewitt 算子、 Log 算子以及 Canny 算子等。 其中, Canny 算子是由计算机科学家 John F. Canny 于 1986 年提出的一种边缘检测算子

    2024年04月12日
    浏览(9)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包