opencv图像形态学(边缘检测算法实例)

news/2024/9/15 7:18:32 标签: opencv, 人工智能, 计算机视觉

引言

图像形态学是一种基于数学形态学的图像处理技术,它主要用于分析和修改图像的形状和结构。在OpenCV中,图像形态学操作通过一系列的数学运算来实现,如腐蚀、膨胀、开运算、闭运算等。这些操作在图像处理、计算机视觉和模式识别等领域有着广泛的应用。

一、图像边缘检测

边缘检测:是图形图像处理、计算机视觉和机器视觉中的一个基本工具,通常用于特征提取和特征检测,旨在检测一张数字图像中有明显变化的边缘或者不连续的区域

1.边缘检测原理

边缘检测的基本原理是基于图像中局部区域与周围区域之间的灰度变化。当图像中存在灰度变化时,这种变化通常被视为边缘。在实际应用中,梯度可以通过不同的算法来计算,如Sobel算子、Prewitt算子等。这些算法通过应用特定的卷积核(或模板)到图像上,来计算每个像素点的梯度。

边缘检测的主要步骤

  1. 滤波:由于边缘检测算法主要基于图像强度的一阶和二阶导数,但这些导数对噪声非常敏感,因此滤波是边缘检测前的必要步骤。常用的滤波器是高斯滤波器,它通过离散化的高斯函数产生一组归一化的高斯核,然后基于这些高斯核对图像灰度矩阵的每一点进行加权求和,从而实现图像的平滑处理。
  2. 增强:增强算法的目的是将图像中灰度有显著变化的点(即潜在的边缘点)凸显出来。一般通过计算梯度幅值来完成。梯度是一个向量,表示图像中亮度变化的方向和速率。梯度的幅值反映了亮度变化的强度,因此可以通过计算每个像素点的梯度幅值来增强边缘信息。
  3. 检测:在增强后的图像中,虽然边缘信息得到了凸显,但并非所有梯度幅值较大的点都是真正的边缘点。因此,需要通过阈值化来检测边缘点。即设定一个或多个阈值,将梯度幅值大于阈值的点视为边缘点。
  4. 定位与连接:在检测到边缘点后,需要进一步确定边缘的精确位置,并将检测到的边缘点连接成完整的边缘轮廓。这通常涉及到对边缘点的进一步处理和分析,如亚像素边缘定位、霍夫变换、轮廓跟踪等。

常见的边缘检测算法

  1. Sobel算子:Sobel算子是基于一阶导数的边缘检测算子,它利用像素上下左右邻域的灰度加权算法,根据在边缘点处达到极值这一原理进行边缘检测。Sobel算子有两个,一个是检测水平边缘的,另一个是检测垂直边缘的。
  2. Laplacian算子:Laplacian算子是基于二阶导数的边缘检测算子,它对噪声比较敏感,但能够检测到更细致的边缘。Laplacian算子可以检测两个方向上的边,但通常需要先对图像进行平滑处理以减少噪声的影响。
  3. Canny边缘检测:Canny边缘检测是一种多级边缘检测算法,它结合了高斯滤波、梯度计算、非极大值抑制和双阈值处理等多个步骤,能够以较低的错误率检测边缘,并且检测到的边缘精确定位在真实边缘的中心。Canny边缘检测算法是目前应用最广泛的边缘检测算法之一。

算法实现:

1.Sobel算子:
import cv2  
  
# 读取图片
monkey = cv2.imread('monkey.jpg', cv2.IMREAD_GRAYSCALE)  
  
# 使用Sobel算子检测x方向的边缘,结果以64位浮点数存储  
monkey_x_64 = cv2.Sobel(monkey, cv2.CV_64F, dx=1, dy=0)  
  
# 将64位浮点数结果转换为8位无符号整数,便于显示  
monkey_x_full = cv2.convertScaleAbs(monkey_x_64)  
  
# 使用Sobel算子检测y方向的边缘,结果以64位浮点数存储  
monkey_y_64 = cv2.Sobel(monkey, cv2.CV_64F, dx=0, dy=1)  
  
# 将64位浮点数结果转换为8位无符号整数,便于显示  
monkey_y_full = cv2.convertScaleAbs(monkey_y_64)  
  
# 将x和y方向的边缘图像加权合并  
monkey_xy_full = cv2.addWeighted(monkey_x_full, 0.5, monkey_y_full, 0.5, 0)  # 这里我调整了权重为0.5和0.5,您可以根据需要调整  
  
# 显示合并后的边缘图像  
cv2.imshow("monkey_xy", monkey_xy_full)  
  
# 等待按键操作  
cv2.waitKey(0)  
  
# 关闭所有OpenCV窗口  
cv2.destroyAllWindows()

前后对比

2.Canny边缘检测
import cv2  
  
# 读取图片,注意文件名更正为 monkey.jpg  
monkey = cv2.imread('monkey.jpg', cv2.IMREAD_GRAYSCALE)  
  
# 显示原始灰度图片  
cv2.imshow('Original Monkey', monkey)  
cv2.waitKey(0)  
  

# 使用Canny边缘检测算法  
monkey_canny = cv2.Canny(monkey, 50, 100)  
  
# 显示Canny边缘检测结果,注意窗口命名以避免混淆  
cv2.imshow('Canny Edges', monkey_canny)  
cv2.waitKey(0)  
  
# 关闭所有OpenCV窗口  
cv2.destroyAllWindows()

前后对比

3.Laplacian算子

import cv2  
  
# 读取图片,注意文件名更正为 monkey.jpg  
monkey = cv2.imread('monkey.jpg', cv2.IMREAD_GRAYSCALE)  

# 应用Laplacian算子检测边缘  
monkey_lap = cv2.Laplacian(monkey, cv2.CV_64F)  
monkey_lap_full = cv2.convertScaleAbs(monkey_lap)  
  
# 显示Laplacian边缘检测结果  
cv2.imshow('Laplacian Edges', monkey_lap_full)  
cv2.waitKey(0) 

除了上述算法外,还有Prewitt算子、Roberts算子、Scharr算子等多种边缘检测算法可供选择。这些算法各有优缺点,在实际应用中需要根据具体需求和图像特点选择合适的算法。


http://www.niftyadmin.cn/n/5637722.html

相关文章

第四章-CAN通信-CAN协议解析 CAN协议报文dbc解析实例 hal库例程 CAN总线协议 CAN通讯协议应用例程

第四章-CAN通信 4.3-实际编程 4.3.1-回环测试 软件初始化设置 CAN频率相关设置 打开接收中断 为了方便调试,我们初始化一下串口-PA9 PA10 添加一下重映射 /** * brief 重定向printf (重定向fputc),使用时候记得勾选上魔法棒->Target->UseMi…

PostgreSQL技术内幕3:PG逻辑存储层级和物理存储结构

目录 0.概述1.PG数据组织(逻辑包含关系)2.存储目录3.文件布局4.页内数据存储和TOAST策略 0.概述 本篇用来介绍PG存储的逻辑层级关系,database->schema,到schema中可以存在的各种信息,像table,索引等(理…

Redis Desktop Manager 0.8.8.384 安装与使用详解

💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「storm…

TCP/IP网络编程:第18章聊天室

服务端&#xff1a;负责连接客户端&#xff0c;转发客户端的信息给其他客户 客户端&#xff1a;发送信息给服务端&#xff0c;接收服务端传来的其他客户的信息 服务端代码&#xff1a; #include <stdio.h> #include <stdlib.h> #include <unistd.h> #incl…

亲测好用,ChatGPT 3.5/4.0新手使用手册,最好论文指令手册~ 【2024年9月 更新】

本以为遥遥领先的GPT早就普及了&#xff0c;但小伙伴寻找使用的热度一直高居不下&#xff0c;其实现在很简单了&#xff01; 国产大模型快200家了&#xff0c;还有很多成熟的国内AI产品&#xff0c;跟官网一样使用&#xff0c;还更加好用~ ① 3.5 大多数场景是够用的&#xff…

excel表格添加目录

给excel添加目录&#xff0c;索引目录的方式&#xff1a; 针对.xlsx后缀&#xff0c;老版本.xls的话是不支持的。 &#xff08;之前做表格目录&#xff0c;怎么也不显示&#xff0c;但是在空白的表格中尝试公式&#xff0c;就可以实现&#xff0c;也不知道为什么就这个表格不…

提升效率!ArcGIS中创建脚本工具

在我们日常使用的ArcGIS中已经自带了很多功能强大的工具&#xff0c;但有时候遇到个人的特殊情况还是无法满足&#xff0c;这时就可以试着创建自定义脚本工具。 一、编写代码 此处的代码就是一个很简单的给图层更改别名的代码。 1. import arcpy 2. input_fc arcpy.GetParam…

打造主播美颜工具:视频美颜SDK与直播美颜API的集成与优化详解

本篇文章&#xff0c;小编将深入讲解视频美颜SDK与直播美颜API的集成与优化策略&#xff0c;帮助开发者构建出色的主播美颜工具。 一、视频美颜SDK与直播美颜API的核心功能 直播美颜API则提供了实时美颜处理的能力&#xff0c;确保美颜效果在直播过程中流畅呈现&#xff0c;不…