图像特征篇我个人觉得就是数学计算方法,实际调用很简单所以本篇是基本原理便于加深理解
图像特征
harris
基本原理:
调用方法
import cv2
# cv2.cornerHarris()
# img:数据类型为float32的入图像
# blockSize:角点检测中指定区域的大公
# ksize: Sobel求导中使用的窗口大小
# k:取值参数为[0.04,0.06]
def cv_show(name,img):
#显示的窗口名字,显示的图像
cv2.imshow(name,img)
cv2.waitKey(0)# 等待时间,毫秒级,0表示任意键终止
#销毁当前窗口
cv2.destroyAllWindows()
img=cv2.imread('picture/chessboard.jpg')
# cv_show('img',img)
print(img.shape)#(512, 512, 3)
gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
dst=cv2.cornerHarris(gray,2,3,0.04)
print(dst.shape)
img[dst>0.01*dst.max()]=[255,0,0]
cv_show('dst',img)
sift
不同σ的高斯函数决定了对图像的平滑程度,越大的σ值对应的图像越模糊
消除边界响应
特征点的主方向
生成特征描述
再完成关键点的梯度计算后,使用直方图统计邻域内像素的梯度和方向
import cv2
import numpy as np
def cv_show(name,img):
#显示的窗口名字,显示的图像
cv2.imshow(name,img)
cv2.waitKey(0)# 等待时间,毫秒级,0表示任意键终止
#销毁当前窗口
cv2.destroyAllWindows()
img=cv2.imread('test_1.jpg')
gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
sift=cv2.SIFT_create()
kp=sift.detect(gray,None)
img=cv2.drawKeypoints(gray,kp,img)
cv_show('img',img)
#计算特征:
kp,des=sift.compute(gray,kp)
print(np.array(kp).shape)
print(des.shape)
print(des[0])