本文所用文件的链接
链接: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)