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()

运行结果如下:

OpenCv之特征检测_第1张图片

三、SIFT算法

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

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

OpenCv之特征检测_第2张图片

 使用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角点检测

OpenCv之特征检测_第3张图片

 案例代码如下:

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()

你可能感兴趣的:(Opencv,opencv,人工智能,计算机视觉)