OpenCV3 角点检测:goodFeaturesToTrack()

论坛 期权论坛 编程之家     
选择匿名的用户   2021-6-2 01:34   11   0

函数原型:

 void cv::goodFeaturesToTrack(
  cv::InputArray image, // 输入图像(CV_8UC1 CV_32FC1)
  cv::OutputArray corners, // 输出角点vector
  int maxCorners, // 最大角点数目
  double qualityLevel, // 质量水平系数(小于1.0的正数,一般在0.01-0.1之间)
  double minDistance, // 最小距离,小于此距离的点忽略
  cv::InputArray mask = noArray(), // mask=0的点忽略
  int blockSize = 3, // 使用的邻域数
  bool useHarrisDetector = false, // false ='Shi Tomasi metric'
  double k = 0.04 // Harris角点检测时使用
 );

参数解析:

第一个参数:是输入图像(8位或32位单通道图)。

第二个参数:是检测到的所有角点,类型为vector或数组,由实际给定的参数类型而定。如果是vector,那么它应该是一个包含
cv::Point2f的vector对象;如果类型是cv::Mat,那么它的每一行对应一个角点,点的x、y位置分别是两列。

第三个参数:用于限定检测到的点数的最大值。

第四个参数:表示检测到的角点的质量水平(通常是0.10到0.01之间的数值,不能大于1.0)。

第五个参数:用于区分相邻两个角点的最小距离(小于这个距离得点将进行合并)。

第六个参数:是mask,如果指定,它的维度必须和输入图像一致,且在mask值为0处不进行角点检测。

第七个参数:是blockSize,表示在计算角点时参与运算的区域大小,常用值为3,但是如果图像的分辨率较高则可以考虑使用较大一点的值。

第八个参数:用于指定角点检测的方法,如果是true则使用Harris角点检测,false则使用Shi Tomasi算法。

第九个参数:是在使用Harris算法时使用,最好使用默认值0.04。

程序示例:

#include <iostream>
#include <vector>
#include <opencv2/opencv.hpp>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>

int main()
{
 cv::Mat image_color = cv::imread("house.jpg", 1);

 //使用灰度图像进行角点检测
 cv::Mat image_gray;
 cv::cvtColor(image_color, image_gray, cv::COLOR_BGR2GRAY);//彩色图转灰度图

 //设置角点检测参数
 std::vector<cv::Point2f> corners;
 int max_corners = 200;
 double quality_level = 0.01;
 double min_distance = 3.0;
 int block_size = 3;
 bool use_harris = false;
 double k = 0.04;

 //角点检测
 cv::goodFeaturesToTrack(image_gray, 
  corners, 
  max_corners, 
  quality_level, 
  min_distance, 
  cv::Mat(), 
  block_size, 
  use_harris, 
  k);

 //将检测到的角点绘制到原图上
 for (int i = 0; i < corners.size(); i++)
 {
  cv::circle(image_color, corners[i], 1, cv::Scalar(0, 0, 255), 2, 8, 0);
 }

 cv::imshow("house", image_color);
 cv::waitKey(0);
 return 0;
}

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP