Python OpenCV fast 特征点检测

参考 FAST(features from accelerated segment test)特征提取算法

       fast特征点是在像素级别上操作的,假设有一个候选点P,判断该定P是不是fast特征点的关键是,查看P点的四周的16个附近的点的灰度值是不是大于指定的阈值threshold =100,如果个数足够大(16个点中差值大于某个阈值的个数大于某个阈值,通常认为阈值为周长的四分之三),则认为该候选点位一个特征点。为了加快特征点的判断不必全部周围的16个都检查对比一边,而是选上下左右(1,5,9,16)4个点 至少有3个点中灰度值与候选点差值大于threshold,就可以认为该候选点P就是fast特征点



python版代码:

import numpy as np
import cv2
# 读入图片
img = cv2.imread('imges/football.png',0)
# 窗口
cv2.namedWindow('win',cv2.WINDOW_AUTOSIZE)
# cv2.namedWindow('win2',cv2.WINDOW_AUTOSIZE)
# 创建fast特征点检测器 threshold=150 候选点与四周灰度差值
fast = cv2.FastFeatureDetector_create(threshold=100,nonmaxSuppression=True,type=cv2.FAST_FEATURE_DETECTOR_TYPE_9_16)
# 开始检测, fast特征点检测到的坐标结果存放在kp
kp = fast.detect(img,None)#
# 绘制特征图
img = cv2.drawKeypoints(img,kp,img,color=(255,0,0))
cv2.imshow('win',img)
# cv2.imshow('win2',img2)
cv2.waitKey(0)
cv2.destroyAllWindows()

效果图:


C++版代码:

CMakeLists.txt文件

CMAKE_MINIMUM_REQUIRED( VERSION 2.8 ) #设定最小版本号
PROJECT( fast_detect ) #设定工程名

#设定可执行二进制文件的目录
SET( EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin) 
#设定存放编译出来的库文件的目录
SET( LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib) 

#并且把该目录设为连接目录
LINK_DIRECTORIES( ${PROJECT_SOURCE_DIR}/lib)
	
#设定头文件目录
INCLUDE_DIRECTORIES( ${PROJECT_SOURCE_DIR}/include)
	
#增加子文件夹,进行后续构建
ADD_SUBDIRECTORY( ${PROJECT_SOURCE_DIR}/src)

# 增加opencv的依赖
FIND_PACKAGE( OpenCV REQUIRED )

# 添加头文件
INCLUDE_DIRECTORIES(  ${OpenCV_INCLUDE_DIRS}  )

ADD_EXECUTABLE( fast_detect fast_detect.cpp )
TARGET_LINK_LIBRARIES( fast_detect ${OpenCV_LIBS}  )

fast_detect.cpp

#include <vector>
#include <opencv2/core/core.hpp>
#include <opencv2/features2d/features2d.hpp>
#include <opencv2/highgui/highgui.hpp>

using namespace cv;

int main(int argc,char *argv[])
{
	Mat image;
	// 待检测图path
	image = imread("imges/football.png");
	// 存储为关键点
	std::vector<KeyPoint> keyPoints;
	// 定义特征检测
	FastFeatureDetector fast(40);	// 检测的阈值为40
	// 特征点检测
	fast.detect(image,keyPoints);
	drawKeypoints(image, keyPoints, image, Scalar::all(255), DrawMatchesFlags::DRAW_OVER_OUTIMG);
	imshow("FAST feature", image);
	waitKey(0);
	
	return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_29796781/article/details/81013237