OpenCv之特征检测

目录

一、基本概念

二、harris角点检测

三、SIFT算法

四、Shi-Tomasi角点检测


一、基本概念

特征检测指的是使用计算机提取图像信息,决定每个图像的点是否属于一个图像特征。特征检测的结果是把图像上的点分为不同的子集,这些子集往往属于孤立的点、连续的曲线或者连续的区域。

特征检测包括边缘检测、角检测、区域检测和脊检测

特征检测应用场景:

  • 图像搜索
  • 拼图游戏
  • 图像拼接

 图像特征就是值得有意义的图像区域,具有独特性,易于识别性,比较角点,斑点以及高密度区

二、harris角点检测

案例代码如下:

import cv2
import numpy as np

img = cv2.imread('8.jpg')

# 变成灰度图片
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

# 角点检测
# blockSize没有要求必须是奇数
# 返回目标值(角点响应),每一个像素点都可以计算出一个角点响应
dst = cv2.cornerHarris(gray,blockSize=2,ksize=3,k=0.04)

#显示角点
# 设定阈值,dst.max()
img[dst > (0.01 * dst.max())] = [0,0,255]

cv2.imshow('img',img)

cv2.waitKey(0)
cv2.destroyAllWindows()

运行结果如下:

三、SIFT算法

SIFT,即尺度不变特征变换,是用于图像处理领域的一种描述。这种描述具有尺度不变性,可在图像中检测出关键点,是一种局部特征描述子。

Harris角点具有旋转不变的特性,但是缩放后,原来的角点有可能就不是角点了

 使用SIFT的步骤

  • 创建SIFT对象sift = cv2.xfeatures2d.SIFT_create()
  • 进行检测,kp = sift.detect(img,...)
  • 绘制关键点,drawKeypoints(gray,kp,img)

案例代码如下:

import cv2
import numpy as np

img = cv2.imread('8.jpg')

gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

# 创建sift对象
# 注:xfeatures2d是opencv的扩展包中的内容,需要安装opencv-contrib-python
sift = cv2.xfeatures2d.SIFT_create()

# 进行检测
kp = sift.detect(gray)

# 计算描述子
kp,des = sift.compute(gray,kp)

# 还可以一步到位计算
kp,des = sift.detectAndCompute(gray)

# 绘制关键点
cv2.drawKeypoints(gray,kp,img)

# 展示
cv2.imshow('img',img)

# 释放资源
cv2.waitKey(0)
cv2.destroyAllWindows()

关键点与描述子的区别:

关键点:位置、大小和方向

描述子:记录了关键点周围对其有共享的像素点的一组向量值,其不受仿射变换

四、Shi-Tomasi角点检测

 案例代码如下:

import cv2
import numpy as np

img = cv2.imread('8.jpg')

# 灰度化
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

# shi-tomai角点检测
corners = cv2.goodFeaturesToTrack(gray,maxCorners=0,qualityLevel=0.01,minDistance=10)

# 变成int类型
corners = np.int0(corners)

# 画出角点
for i in corners:
    # i相当于corners中的每一行数据
    # ravel()把二维变成一维了,即角点的坐标点
    x,y = i.ravel()
    cv2.circle(img,(x,y),3,(255,0,0),-1)

# 展示图片
cv2.imshow('img',img)
# 释放资源
cv2.waitKey(0)
cv2.destroyAllWindows()
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

几两春秋梦_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值