索引地址:系列索引
角点介绍:角点检测
| void cv::goodFeaturesToTrack ( InputArray image, OutputArray corners, int maxCorners, double qualityLevel, double minDistance, InputArray mask = noArray(), int blockSize = 3, bool useHarrisDetector = false, double k = 0.04 )
|
- 输入位、浮点32位、单通道图片
- 检测到的角点向量
- 返回的最大角数。如果还有角比发现的角多,则返回其中最强的角。maxCorners<=0意味着没有设置最大值的限制,并且返回所有检测到的角点。
- 表征图像角点最小可接受质量的参数。参数值乘以最佳拐角质量度量,即最小特征值或Harris函数响应。质量指标低于产品的角落被拒收。例如,如果最佳角点的质量度量值为1500,质量等级为0.01,则质量度量值小于15的所有角点都将被拒绝。
- 返回角点之间的最小可能欧氏距离。
- 可选感兴趣区域。如果图像不是空的(它需要具有CV_8UC1类型和与图像相同的大小),它将指定检测角点的区域。
- 用于计算每个像素邻域上的导数协变矩阵的平均块大小。
- 指示是使用Harris检测器还是cornerMinEigenVal的参数。
- Harris探测器的自由参数。
确定图像上的强角点。该函数查找图像或指定图像区域中最突出的角点
- 函数使用cornerMinEigenVal或cornerHarris计算每个源图像像素处的角点质量度量。
- 函数执行非最大值抑制(保留3x3邻域中的局部最大值)。
- 最小特征值小于qualityLevel的角点⋅maxx,yqualityMeasureMap(x,y)被拒绝。
- 其余的角点按质量度量按降序排序。
- 函数会丢弃距离小于maxDistance的强角点的每个角点。
- 该函数可用于初始化对象的基于点的跟踪器。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
| #include "opencv2/opencv.hpp"
using namespace std; using namespace cv;
int main() { Mat image = imread("Test.png"); Mat imgGray; cvtColor(image, imgGray, COLOR_BGR2GRAY);
vector<Point2f> corners; int maxCorners = 500; double qualityLevel = 0.01; double minDistance = 10; Mat mask; int blockSize = 3; int gradientSize = 3; bool useHarrisDetector = false; double k = 0.04; goodFeaturesToTrack(imgGray, corners, maxCorners, qualityLevel, minDistance, mask, blockSize, gradientSize, useHarrisDetector, k);
Scalar color(0, 0, 255); MarkerTypes markerType = MARKER_TILTED_CROSS; int markerSize = 8; int thickness = 2; for(int i=0; i<corners.size(); i++) { drawMarker(image, corners[i], color, markerType, markerSize, thickness); }
imshow("image", image);
waitKey();
return 0; }
|
