news 2026/4/18 5:31:28

计算机视觉——Opencv(角点检测和特征提取)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
计算机视觉——Opencv(角点检测和特征提取)

Harris 角点检测

1.什么是Harris 角点检测

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

Harris 角点检测通过计算像素点在各个方向上的灰度变化,来判断该点是否为角点,其核心优势是具有旋转不变性。

2.角点检测算法的基本思想

使用一个固定的小窗口在图像上进行任意方向的滑动,比较滑动前与滑动后两种情况,窗口中的像素灰度变化程度,如果存在任意方向上的滑动,都有着较大灰度变化(sobel算子),那么我们可以认为该窗口中存在角点。

3.实现 Harris 角点检测

Harris 角点检测的核心函数是cornerHarris(img, blockSize, ksize, k[, dst[, borderType]]) -> dst

参数说明:

img: 输入图像。
blockSize: 角点检测中要考虑的领域大小。
ksize: Sobel求导中使用的窗口大小。
k: Harris角点检测方程中的自由参数,取值参数为 [0.04, 0.06]。
dst: 返回numpy.ndarray对象,大小和src相同,值越大,对应像素点是角的概率越高

代码如下:

import cv2 import numpy as np img = cv2.imread(r"C:\Users\LEGION\Desktop\OIP-C.webp") #转为灰度图 gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) #执行Harris角点检测 dst = cv2.cornerHarris(gray, blockSize=4, ksize=3, k=0.04) # 标记检测到的角点 img[dst > 0.01 * dst.max()] = [0, 0, 255] # 这里通过对角点响应进行阈值处理,标记出检测到的角点。 # 0.05 * dst.max() 是一个阈值,大于这个值的像素点会被标记为红色。 cv2.imshow('img', img) cv2.waitKey(0)

图像预处理:彩色图像包含 RGB 三个通道的信息,角点检测只需要灰度信息即可,因此使用cv2.cvtColor()将彩色图转换为灰度图,减少计算量。

角点检测函数:cv2.cornerHarris()的返回值dst是一个与输入图像大小相同的 numpy 数组,每个元素对应原图像中对应像素点的角点响应值,响应值越高,该点是角点的可能性越大。

角点标记:没有直接使用dst的原始值进行判断,而是使用阈值。这样可以过滤掉大量弱响应点,只保留最有可能的角点

运行结果:

SIFT 特征提取

1. 什么是 SIFT

SIFT(Scale Invariant Feature Transform)尺度不变特征变换。SIFT特征具有对旋转、尺度缩放、亮度变化等保持不变性,是一种非常稳定的局部特征。

2.SIFT 特征提取主要分为两个步骤

检测关键点(与 Harris 角点类似,但具有尺度不变性)。

计算关键点的描述符(将关键点转换为一组固定长度的向量,方便后期的特征匹配)。

3.SIFT算法的特点

1、图像的局部特征,对旋转、尺度缩放、亮度变化保持不变,对视角变化、仿射变换、噪声也保持一定程度的稳定性。

2、独特性好,信息量丰富,适用于海量特征库进行快速、准确的匹配。

3、多量性,即使是很少几个物体也可以产生大量的SIFT特征

4、高速性,经优化的SIFT匹配算法甚至可以达到实时性

5、扩招性,可以很方便的与其他的特征向量进行联合。

4.实现 SIFT 特征提取

man = cv2.imread(r"C:\Users\LEGION\Desktop\OIP-C.webp") man_gray = cv2.cvtColor(man, cv2.COLOR_BGR2GRAY)# sift = cv2.SIFT_create() #sift对象 kp = sift.detect(man_gray) man_sift = cv2.drawKeypoints(man, kp, outImage=None, flags=cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS) cv2.imshow('man_sift', man_sift) cv2.waitKey(0) # 使用sift.compute()计算关键点描述符,方便后期的特征匹配 kp, des = sift.compute(man, kp) # print(np.array(kp).shape, des.shape) # 输出关键点的形状和描述符的形状。 # np.array(kp).shape 表示关键点的数量和属性。 # des.shape 表示描述符的数量和属性。

创建 SIFT 对象cv2.SIFT_create()是创建 SIFT 特征提取对象的核心函数

检测关键点sift.detect()接收灰度图作为输入,返回一个关键点列表kp,每个关键点包含多个属性:

  • kp.pt:关键点的 (x, y) 像素坐标。

  • kp.size:关键点的大小(对应尺度空间中的尺度)。

  • kp.angle:关键点的方向(范围 0-360 度,保证旋转不变性)。

  • kp.response:关键点的响应值,用于筛选强特征点。

计算描述符sift.compute()用于计算关键点的描述符,描述符des是一个二维 numpy 数组,形状为(N, 128),其中N是关键点的数量,128 表示每个关键点对应一个 128 维的向量。这个向量具有独特性,能够唯一描述一个关键点,为后期的图像特征匹配提供数据支持。

输出形状信息np.array(kp).shape会输出关键点的数量(比如(120,)表示检测到 120 个关键点),des.shape会输出(120, 128),表示 120 个关键点对应 120 个 128 维描述符。

运行结果:

表示 347个关键点对应 347 个 128 维描述符

注意:

SIFT 算法对图像的光照变化具有一定的鲁棒性,但在强光照差异下效果会下降。

检测到的关键点数量与图像的复杂度相关,图像纹理越丰富,关键点数量越多。

128 维描述符是 SIFT 算法的默认设置,具有良好的独特性和匹配性能,无需特别修改。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/10 16:45:09

掌握应用开发学习路线,快速成为大模型专家!大模型学习路线,AI大模型开发全流程解析及项目实战!

一、大模型开发整理流程 1.1、什么是大模型开发 我们将开发以大语言模型为功能核心、通过大语言模型的强大理解能力和生成能力、结合特殊的数据或业务逻辑来提供独特功能的应用称为大模型开发。 开发大模型相关应用,其技术核心点虽然在大语言模型上,但…

作者头像 李华
网站建设 2026/4/12 22:50:26

nodejs幸运舞蹈工作室管理系统 培训机构私教预约系统pg28ryio

文章目录 功能概述核心模块技术架构扩展特性 --nodejs技术栈--结论源码文档获取/同行可拿货,招校园代理 :文章底部获取博主联系方式! 功能概述 Node.js幸运舞蹈工作室管理系统是一款专为舞蹈培训机构设计的综合管理平台,支持私教课程预约、会…

作者头像 李华
网站建设 2026/4/7 14:28:27

山东菏泽vs黑龙江鹤岗:小城开发者的路径选择

一、地域产业生态对比:资源禀赋与职业天花板 菏泽模式——政策驱动下的AI测试机遇 政策红利催化技术升级:菏泽依托齐鲁软件园专项扶持资金,构建AI测试创新生态。本地测试员通过智能测试平台开发实现技术跃迁,如自动化报告生成工具…

作者头像 李华
网站建设 2026/4/15 12:05:21

基于Springboot+Vue的养老中心管理系统源码文档部署文档代码讲解等

课题介绍 本课题旨在设计并实现一套基于SpringBootVue的前后端分离养老中心管理系统,解决传统养老中心老人信息管理繁琐、护理服务流程不规范、健康监测不及时、家属沟通不便、后勤与人员管理低效等问题。系统采用SpringBoot作为后端核心框架,结合MyBati…

作者头像 李华
网站建设 2026/4/15 7:49:51

基于微信小程序的自然绮梦之旅旅游服务小程序的设计与实现(源码+lw+部署文档+讲解等)

课题介绍 本课题旨在设计并实现一套基于微信小程序的自然绮梦之旅旅游服务小程序,解决自然景观旅游信息分散、出行规划繁琐、景点预约不便、特色体验对接不畅、旅游反馈渠道单一及行程管理低效等问题。系统采用SpringBoot作为后端核心框架,结合MyBatis-P…

作者头像 李华
网站建设 2026/4/16 14:11:01

异步可以解决高并发请求?

你想知道异步编程是否能解决高并发请求的问题,先给你一个明确的结论:异步编程不能「直接解决」高并发,但它是「支撑高并发」的核心技术之一,能显著提升系统处理高并发的能力和吞吐量。 先理清:高并发的核心痛点 &…

作者头像 李华