之前想用TensorFlow + OpenCV做目标检测,但是最后因为TF2.0资料属实不多所以夭折了,不过OpenCV还是非常值得学习的。
特征检测算法
OpenCV中比较常用的特征检测和提取算法:
- Harris:用于角点检测
- SIFT:用于斑点检测
- SERF:用于斑点检测
- FAST:用于角点检测
- BRIEF:用于斑点检测
- ORB:带方向的FAST算法和具有旋转不变性的BRIEF算法(暴力匹配和基于FLANN的匹配法)
特征
上述算法中提到了角点和斑点,这是两种重要的特征。特征是有意义的图像区域。
cornerHarris角点特征
Harris算法中认为,平坦区域在所有方向上都没有明显的梯度变化,边缘区域在某个方向上有明显的梯度变化,角度边缘则在各个方向都有明显的梯度变化。
下面用一张国际象棋的图片和cornerHarris演示角点识别
import cv2
import numpy as np
img = cv2.imread('chess.jpg')
gray1 = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)#灰化,可以降低维度,将三通道变为一通道
gray = np.float32(gray1)
dst = cv2.cornerHarris(gray, 2, 15, 0.04)
#参数依次为:输入图像