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

OpenCV进阶操作:角点检测

文章目录

  • 一、角点检测
    • 1、定义
    • 2、检测流程
      • 1)输入图像
      • 2)图像预处理
      • 3)特征提取
      • 4)角点检测
      • 5)角点定位和标记
      • 6)角点筛选或后处理(可选)
      • 7)输出结果
  • 二、Harris 角点检测(经典方法)
    • 1、参数解释
    • 2、图片的读取以及灰度转换
    • 3、检测角点,并对响应值进行阈值处理
  • 三、Shi-Tomasi 角点检测(Good Features to Track)
    • 1、参数解释
    • 2、代码示例
  • 四、FAST 角点检测(快速角点检测)
    • 1、参数解释
    • 2、代码示例
  • 总结


一、角点检测

1、定义

在计算机视觉中,角点检测是识别图像中局部区域(角点)的关键技术,这些区域通常是两条或多条边缘的交点,具有丰富的结构信息,常用于图像匹配、跟踪、三维重建等任务。

Harris角点检测算法是一种常用的计算机视觉算法,用于检测图像中的角点。该算法通过计算图像中每个像素的局部自相关矩阵,来判断该像素是否为角点。
在这里插入图片描述

2、检测流程

1)输入图像

将待检测的图像作为输入。

2)图像预处理

对输入图像进行必要的预处理,如灰度化、降噪等,以便更好地进行角点检测。

3)特征提取

使用角点检测算法对预处理后的图像进行角点特征提取。常见的角点检测算法有Harris角点检测算法、Shi-Tomasi角点检测算法等。

4)角点检测

根据所选的角点检测算法,计算图像中的每个像素点的角点响应值,以判断其是否为角点。具体算法会根据不同的方法而有所差异。

5)角点定位和标记

根据角点响应值,确定角点的位置,并进行标记。可以使用函数或算法来绘制或返回角点的位置信息。

6)角点筛选或后处理(可选)

根据具体需求,可以对检测到的角点进行筛选或进行后处理操作,如非极大值抑制、阈值过滤等,以去除不准确的角点或增强有效的角点。

7)输出结果

根据需要,可以将检测到的角点的位置信息、图像中绘制的标记或其他相关信息作为输出结果。

二、Harris 角点检测(经典方法)

1、参数解释

角点指图像中局部区域与周围区域有较大灰度变化的点或像素。
cornerHarris(img, blockSize, ksize, k[, dst[, borderType]]) -> dst• img:单通道灰度图像(数据类型为 float32)。• blockSize: 计算角点时考虑的邻域大小(如 2 表示 2x2 邻域)。• ksize:Sobel 梯度计算的核大小(常用 3)。• k: 响应函数中的参数,影响角点检测的敏感度(k 越小,检测到的角点越多)。,取值参数为 [0.04,0.06]。dst:返回numpy.ndarray对象,大小和src相同,值越大,对应像素点是角的概率越高

2、图片的读取以及灰度转换

img = cv2.imread('huanghelou.png')
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

3、检测角点,并对响应值进行阈值处理

dst = cv2.cornerHarris(gray,4,3,0.04)
# 标记检测到的角点
img[dst > 0.01 * dst.max()] = [0, 255, 0]
# 这里通过对角点响应进行阈值处理,标记出检测到的角点。
# 0.05 * dst.max() 是一个阈值,大于这个值的像素点会被标记为绿色。
cv2.imshow('img',img)
cv2.waitKey(0)

在这里插入图片描述

三、Shi-Tomasi 角点检测(Good Features to Track)

1、参数解释

corners = cv2.goodFeaturesToTrack(gray_img, maxCorners, qualityLevel, minDistance)
参数:
maxCorners:最多检测的角点数量(若角点数量超过,按响应值降序筛选)。
qualityLevel:角点质量阈值(0~1,值越小保留的角点越多,通常取 0.01~0.1)。
minDistance:角点之间的最小像素距离(避免密集角点)。
输出:角点坐标数组(形状为 (N, 1, 2),N 为角点数量)。

2、代码示例

import cv2
import numpy as npimg = cv2.imread('building.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)# Shi-Tomasi角点检测
corners = cv2.goodFeaturesToTrack(gray, maxCorners=100, qualityLevel=0.01, minDistance=10)
corners = np.int0(corners)  # 转换为整数坐标# 绘制角点
for corner in corners:x, y = corner.ravel()cv2.circle(img, (x, y), 3, (0, 255, 0), -1)  # 绿色圆点标记cv2.imshow('Shi-Tomasi Corners', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

在这里插入图片描述

四、FAST 角点检测(快速角点检测)

1、参数解释

fast = cv2.FastFeatureDetector_create(threshold=10, nonmaxSuppression=True)
corners = fast.detect(gray_img, None)
参数:
threshold:灰度差异阈值(值越小,检测到的角点越多)。
nonmaxSuppression:是否启用非极大值抑制(建议设为 True,避免密集角点)。
输出:KeyPoint 对象列表,包含角点坐标、大小等信息。

2、代码示例

import cv2img = cv2.imread('fast_corner.jpg', cv2.IMREAD_GRAYSCALE)# 创建FAST检测器
fast = cv2.FastFeatureDetector_create(threshold=10, nonmaxSuppression=True)# 检测角点
corners = fast.detect(img, None)# 绘制角点
img_color = cv2.cvtColor(img, cv2.COLOR_GRAY2BGR)
cv2.drawKeypoints(img_color, corners, img_color, color=(0, 255, 0), flags=cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)cv2.imshow('FAST Corners', img_color)
cv2.waitKey(0)
cv2.destroyAllWindows()

在这里插入图片描述


总结

角点检测是计算机视觉中的一种特征检测方法,用于寻找图像中的角点或者具有角点特征的图像区域。角点是指图像中突然改变方向的点,即在其周围的不同方向上都有较大的灰度变化。角点具有一些特殊性质,如旋转不变性、尺度不变性和光照不变性等,因此在图像处理和计算机视觉中具有广泛的应用。

相关文章:

  • n8n系列(1)初识n8n:工作流自动化平台概述
  • 基于 GO 语言的 Ebyte 勒索软件——简要分析
  • 【Vue】全局事件总线 TodoList 事件总线
  • HTML07:表格标签
  • 全球10公里分辨率的玉米、小麦、水稻和大豆生产栅格数据集(2010-2020)
  • K8S - Volume 与 PersistentVolume - 容器存储与数据持久化
  • 通过TinyML为语音助手赋能,推动以用户为中心的创新和现实世界应用
  • vue3+ts+自定义指令,生产页面水印
  • Linux云服务器配置git开发环境
  • 计算机操作系统 - 多级反馈队列比例份额
  • deeplabv3+街景图片语义分割,无需训练模型,看不懂也没有影响,直接使用,cityscapes数据集_23
  • 搭建spark yarn 模式的集群
  • 武汉火影数字|数字规划馆打造沉浸式数字化互动内容
  • 5月6日日记
  • n8n 与智能体构建:开发自动化 AI 作业的基础平台
  • 使用Java实现任务调度:从Timer到Quartz
  • 【CPU占用率查看】
  • 从零开始学习人工智能(Python高级教程)Day6-Python3 正则表达式
  • 《C语言中的结构体:数据组织的艺术》
  • 美信监控易:全栈式自主可控的底层架构优势
  • 湖北奥莱斯轮胎公司逃避监管排放大气污染物被罚25万元
  • 起底新型保健品电话销售诈骗:从快递信息中筛选对象,忽悠其高价买药
  • 牛市早报|“五一”假期预计跨区域人员流动量累计14.67亿人次
  • “子宫肌瘤男性病例”论文后:“宫颈癌、高危产妇”论文也现男性病例,作者称“打错了”
  • 禅定佛的微笑,从樊锦诗提到过的那尊说起
  • 这样喝酸奶相当于在喝糖水,会导致娃龋齿、肥胖