python+opencv做特征点检测

本文介绍了如何使用Harris角点检测器检测图像中的角点,并通过STAR和SIFT特征点检测器提取物体特征。内容涵盖了角点检测原理、Harris算子的应用以及STAR和SIFT特征点检测的实战案例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文所用文件的链接

链接:https://pan.baidu.com/s/1RWNVHuXMQleOrEi5vig_bQ
提取码:p57s

角点检测

对一个图像执行角点检测, 可以检测出平直楞线的交汇点. (求亮度梯度方向改变的像素点的位置)

# Harris角点检测器
# gray: 灰度图像
# 边缘水平方向,垂直方向亮度梯度值改变超过阈值7/5时即为边缘.
# 边缘线方向改变超过阈值0.04弧度值即为一个角点.
corners = cv.cornerHarris(gray, 7, 5, 0.04)

案例:

"""
角点检测
"""
import cv2 as cv

img = cv.imread('../ml_data/box.png')
cv.imshow('img', img)
# 角点监测
gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
cv.imshow('gray', gray)
corners = cv.cornerHarris(gray, 7, 5, 0.04)
print(img.shape, corners.shape)
# 在图像中绘制角点
mixture = img.copy()
mixture[corners>corners.max()*0.01] = [0,0,255]
cv.imshow('mixture', mixture)

cv.waitKey()

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

特征点检测

STAR特征点检测 / SIFT特征点检测

特征点检测结合了边缘检测与角点检测从而识别出物体的特征点.

STAR特征点检测

import cv2 as cv
# 创建star特征点检测器
star = cv.xfeatures2d.StarDetector_create()
keypoints = star.detect(gray)
# cv提供了方法吧keypoint绘制在图像中
cv.drawKeypoints(img, keypoints, 
                 mixture, flags=
cv.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)

SIFT特征点检测

sift = cv.xfeatures2d.SIFT_create()
keypoints = sift.detect(gray)

案例:

"""
sift特征点检测
"""
import cv2 as cv
img = cv.imread('../ml_data/table.jpg')
cv.imshow('img', img)
gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
cv.imshow('gray', gray)
# 提取特征点
sift = cv.xfeatures2d.SIFT_create()
keypoints = sift.detect(gray)
mixture = img.copy()
cv.drawKeypoints(img, keypoints, 
                 mixture, flags=cv.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)
cv.imshow('mixture', mixture)
cv.waitKey()

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

特征值矩阵

图像的特征值描述矩阵记录了图像的特征点以及每个特征点的梯度信息. 相似图像的特征值矩阵也相似. 如果有足够多的样本就可以基于隐马模型进行图像内容的识别.

keypoints = sift.detect(gray)
# desc即为图像的特征值矩阵
_, desc = sift.compute(gray, keypoints)
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值