环境:opencv 2.3.1
函数 goodFeaturesToTrack,函数原型:
void goodFeaturesToTrack( InputArray image, OutputArray corners,
int maxCorners, double qualityLevel, double minDistance,
InputArray mask=noArray(), int blockSize=3,
bool useHarrisDetector=false, double k=0.04 );
- 第一个参数
image:8位或32位单通道灰度图像; - 第二个参数
corners:位置点向量,保存的是检测到的角点的坐标; - 第三个参数
maxCorners:定义可以检测到的角点的数量的最大值; - 第四个参数
qualityLevel:检测到的角点的质量等级,角点特征值小于qualityLevel乘以 最大特征值的点将被舍弃; - 第五个参数
minDistance:两个角点间最小间距,以像素为单位; - 第六个参数
mask:指定检测区域,若检测整幅图像,mask置为空Mat; - 第七个参数
blockSize:计算协方差矩阵时窗口大小; - 第八个参数
useHarrisDetector:是否使用Harris角点检测,为false,则使用Shi-Tomasi算子; - 第九个参数k:留给
Harris角点检测算子用的中间参数,一般取经验值0.04~0.06。第八个参数为false时,该参数不起作用;
函数使用实例:
int main()
{
Mat img = imread("test.jpg");
Mat grayImage;
//转换灰度图
cvtColor(img, grayImage, CV_BGR2GRAY);
//开始进行角点检测
vector<Point2f> dstPoint2f;
goodFeaturesToTrack(grayImage, dstPoint2f, 200, 0.01, 10, Mat(), 3);
//遍历每个点,进行绘制,便于显示
Mat dstImage;
img.copyTo(dstImage);
for (int i = 0; i < (int)dstPoint2f.size(); i++)
{
circle(dstImage, dstPoint2f[i], 3, Scalar(theRNG().uniform(0, 255), theRNG().uniform(0, 255), theRNG().uniform(0, 255))
, 2, 8);
}
imshow("Frame_Windows", dstImage);
waitKey();
return 0;
}
运行结果如下
本文介绍OpenCV中goodFeaturesToTrack函数的使用方法,包括各参数含义及示例代码。该函数用于检测图像中的角点,并可通过调整参数来优化检测结果。
835

被折叠的 条评论
为什么被折叠?



