当前位置: 首页 > article >正文

《Opencv》Canny边缘检测操作

目录

一、简介

二、操作步骤

三、代码实例

四、代码解释

 五、参数调整

六、总结


一、简介

OpenCV 是一个广泛使用的计算机视觉库,提供了许多图像处理和计算机视觉算法。Canny 边缘检测是其中一种常用的边缘检测算法,由 John F. Canny 在 1986 年提出。Canny 边缘检测算法旨在找到图像中的边缘,并且具有以下特点:

  1. 低错误率:尽量减少误检和漏检。

  2. 定位精度高:检测到的边缘点应该尽可能接近真实边缘。

  3. 单一边缘响应:对于每个真实的边缘点,算法应该只返回一个点。

二、操作步骤

Canny 边缘检测算法通常包括以下几个步骤:

  1. 高斯滤波:平滑图像以减少噪声。

  2. 计算梯度:使用 Sobel 算子计算图像的梯度幅值和方向。

  3. 非极大值抑制:在梯度方向上进行非极大值抑制,以细化边缘。

  4. 双阈值检测:使用高低阈值来检测和连接边缘。

  5. 边缘连接:通过连接强边缘和弱边缘来形成完整的边缘。

三、代码实例

OpenCV 提供了 cv2.Canny() 函数来执行 Canny 边缘检测。以下是一个详细的示例代码,展示了如何使用 OpenCV 进行 Canny 边缘检测。

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

# 读取图像
image = cv2.imread('image.jpg', cv2.IMREAD_GRAYSCALE)

# 高斯滤波
blurred_image = cv2.GaussianBlur(image, (5, 5), 0)

# Canny 边缘检测
edges = cv2.Canny(blurred_image, threshold1=100, threshold2=200)

# 显示结果
plt.figure(figsize=(10, 5))

plt.subplot(1, 2, 1)
plt.title('Original Image')
plt.imshow(image, cmap='gray')

plt.subplot(1, 2, 2)
plt.title('Canny Edges')
plt.imshow(edges, cmap='gray')

plt.show()

四、代码解释

  1. 读取图像

    image = cv2.imread('image.jpg', cv2.IMREAD_GRAYSCALE)
    • cv2.imread():读取图像文件。

    • cv2.IMREAD_GRAYSCALE:以灰度模式读取图像。

  2. 高斯滤波

    blurred_image = cv2.GaussianBlur(image, (5, 5), 0)
    • cv2.GaussianBlur():使用高斯滤波器平滑图像,减少噪声。

    • (5, 5):高斯核的大小。

    • 0:标准差,设为 0 表示自动计算。

  3. Canny 边缘检测

    edges = cv2.Canny(blurred_image, threshold1=100, threshold2=200)
    • cv2.Canny():执行 Canny 边缘检测。

    • threshold1 和 threshold2:高低阈值,用于双阈值检测。

  4. 显示结果

    plt.figure(figsize=(10, 5))
    
    plt.subplot(1, 2, 1)
    plt.title('Original Image')
    plt.imshow(image, cmap='gray')
    
    plt.subplot(1, 2, 2)
    plt.title('Canny Edges')
    plt.imshow(edges, cmap='gray')
    
    plt.show()
    • plt.figure():创建一个新的图形。

    • plt.subplot():创建子图。

    • plt.imshow():显示图像。

    • plt.show():显示图形。

 五、参数调整

Canny 边缘检测的效果很大程度上取决于两个阈值参数 threshold1 和 threshold2。通常情况下,threshold2 是 threshold1 的两倍或三倍。你可以通过调整这两个参数来获得不同的边缘检测效果。

六、总结

 Canny 边缘检测是一种强大的边缘检测算法,能够有效地检测图像中的边缘。通过使用 OpenCV 的 cv2.Canny() 函数,你可以轻松地实现 Canny 边缘检测,并根据需要调整参数以获得最佳效果。


http://www.kler.cn/a/427946.html

相关文章:

  • 数据结构-Stack和栈
  • origin如何在已经画好的图上修改数据且不改变原图像的画风和格式
  • 深度学习的应用
  • P1044 [NOIP2003 普及组] 栈 C语言
  • 一文讲解Java中的BIO、NIO、AIO之间的区别
  • python:斐索实验(Fizeau experiment)
  • 代码随想录-算法训练营day45(动态规划07:爬楼梯进阶本,零钱兑换,完全平方数)
  • 健康养生:身心和谐的生活艺术
  • 算法日记 43-44 day 图论(深搜,广搜)
  • 【ESP32】ESP-IDF开发 | DAC数模转换器+余弦波输出例程
  • Flink:入门介绍
  • deepsort复现报错TypeError: tuple indices must be integers or slices, not tuple 解决
  • CSES-1141 Playlist
  • RoformerBERT介绍
  • 架构10-可观测性
  • Unity 设计模式-观察者模式(Observer Pattern)详解
  • 3D 生成重建019-LERF用文本在Nerf中开启上帝之眼
  • 算法训练-位运算
  • Next.js系统性教学:服务器操作与数据变更
  • 毕设记录_论文阅读(动磁式音圈电机的开发与应用)_20241207
  • 保姆级教学 uniapp绘制二维码海报并保存至相册,真机正常展示图片二维码
  • SAP SD学习笔记19 - 形式发票(Proforma Invoice)
  • Oracle 11g ADG 单实例 DG Broker 配置指南
  • ubuntu20.04设置远程桌面
  • 深度全解析开放开源大模型之BLOOM
  • 牛客linux