亚像素级角点定位

代码示例:

#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
using namespace cv;
using namespace std;

#define WINDOW_NAME "Shi-Tomasi角点检测"

Mat src, gray;
int maxCornerNum = 10;
int maxTrackbarNum = 500;

//滚动条回调函数
void cornersRefinement(int, void*){
    Mat copy = src.clone();
    if (maxCornerNum <= 1){
        maxCornerNum = 1;
    }
    //角点检测参数准备
    vector<Point2f> corners;
    double qualityLevel=0.01;//角点检测可接受的最小特征值
    double minDistance = 10;//角点之间的最小距离
    int blockSize = 3;//计算导数自相关矩阵时的指定的领域范围
    double k = 0.04;//权重系数

    //进行Shi-Tomasi角点检测
    goodFeaturesToTrack(gray,
        corners,
        maxCornerNum,
        qualityLevel,
        minDistance,
        Mat(),
        blockSize,
        false,
        k);
    //像素级角点使用蓝色圆圈绘制
    for (int i = 0; i < corners.size(); i++){
        circle(copy, corners[i], 4, Scalar(255, 0, 0), 2, 8, 0);
    }

    /// 角点位置精准化参数
    Size winSize = Size(5, 5);
    Size zeroZone = Size(-1, -1);
    TermCriteria criteria = TermCriteria(
        CV_TERMCRIT_EPS + CV_TERMCRIT_ITER,
        40, //maxCount=40
        0.001);    //epsilon=0.001
    /// 计算精准化后的角点位置
    cornerSubPix(gray, corners, winSize, zeroZone, criteria);

    //亚像素级角点使用品红色圆圈绘制
    for (int i = 0; i < corners.size(); i++){
        circle(copy, corners[i], 4, Scalar(255, 0, 255), 2, 8, 0);
        // 输出角点坐标
        cout << " [" << i << "]  (" << corners[i].x << "," << corners[i].y << ")" << endl;
    }
    cout << endl;
    imshow(WINDOW_NAME, copy);
}

int main(){
    src = imread("church.jpg", 1);
    cvtColor(src, gray, COLOR_BGR2GRAY);

    namedWindow(WINDOW_NAME, WINDOW_AUTOSIZE);
    createTrackbar("最大角点数", WINDOW_NAME, &maxCornerNum, maxTrackbarNum, cornersRefinement);
    imshow(WINDOW_NAME, src);
    cornersRefinement(0, 0);

    waitKey(0);
    return 0;
}

效果:

时间: 2024-10-25 01:30:41

亚像素级角点定位的相关文章

OpenCv_cvFindCornerSubPix()查找亚像素级角点

如果我们进行图像处理的目的不是用于识别特征点而是进行稽核测量,则通常需要更高的精度,而cvGoodFeatureToTrack()只能提供简单的像素坐标值,但有时候我们会需要实际坐标值而不是证书坐标值,例如,我们想要确定图形中一个尖锐的峰值点的位置,但是峰值点的位置一般都不会位于一个像素点的正中心,,这时候就可以使用亚像素检测方法. 亚像素级角点的位置在社星际标定.跟踪并重建蛇形阿基的轨迹或者重建被跟踪目标的三维结构时就是一个基本的测量值.通过cvGoodFeaturesToTrack()函数可

OpenCV中feature2D学习——亚像素级角点检测(cornerSubPix)

概述 除了利用Harris进行角点检测和利用Shi-Tomasi方法进行角点检测外,还可以使用cornerEigenValsAndVecs()函数和cornerMinEigenVal()函数自定义角点检测函数.如果对角点的精度有更高的要求,可以用cornerSubPix()函数将角点定位到子像素,从而取得亚像素级别的角点检测效果. cornerSubPix()函数 (1)函数原型 cornerSubPix()函数在角点检测中精确化角点位置,其函数原型如下: C++: void cornerSub

【练习8.7】cvGoodFeaturesToTrack确定图像强角点、cvFindCornerSubPix亚像素级角点检测

页内索引 题目要求 程序代码 结果图片 要言妙道 借鉴参考 题目要求: 黑色背景上创建一个白色拐角,使得这个角正好在整数值的坐标上,保存用OpenCV打开 a.找出并输出拐角的确切坐标 分别改变原始图像进行如下操作 b.用白边透明填充的圆将圆角遮住 c.用白边黑色填充的圆将圆角遮住 d.用黑色圆块将圆角遮住 程序代码: 1 // OpenCVExerciseTesting.cpp : 定义控制台应用程序的入口点. 2 // 3 // string file_full_name = "D:\\Wo

OpenCV亚像素级的角点检测

亚像素级的角点检测 目标 在本教程中我们将涉及以下内容: 使用OpenCV函数 cornerSubPix 寻找更精确的角点位置 (不是整数类型的位置,而是更精确的浮点类型位置). 理论 代码 这个教程的代码如下所示.源代码还可以从 这个链接下载得到 #include "opencv2/highgui/highgui.hpp" #include "opencv2/imgproc/imgproc.hpp" #include <iostream> #inclu

亚米级低成本室内定位技术的研究 智能三维空间建模和数据集成

信工论坛77期:主题:?The Holy Grail of Sub-meter Indoor Localization with Low-cost Infrastructure亚米级低成本室内定位技术的研究 时间:6月1日下午3:00??? 地点:教一楼201 ? Abstract:Despite?the?fact?that?people?spend?majority?of?their?time?indoor,?indoor?positioning?systems?(IPS)?only?have

三维精密测量(一) —— 一种求圆标志中心亚像素级边缘标定算法

一.边缘细定位边缘 1 参数拟合法的基本原理 CCD是光积分器件,它以固定大小的面积在固定的时间间隔内对投影其感光面上的光强进行积分,输出的结果就是图像的灰度值.由于CCD的积分时间和面积是相对固定的,所以它的输出灰度值只与感光面上光强分布有关.对于某一像素的灰度值输出可以表示为 原文地址:https://www.cnblogs.com/fujj/p/9678658.html

Opencv 亚像素级别角点检测

Size winSize = Size(5,5); Size zerozone = Size(-1,-1); TermCriteria tc = TermCriteria(TermCriteria::EPS + TermCriteria::MAX_ITER, 40, 0.001); cornerSubPix(img_gray1, vec_points, winSize, zerozone, tc); 原文地址:https://www.cnblogs.com/herd/p/9742018.html

图像处理之角点检测与亚像素角点定位

角点是图像中亮度变化最强地方反映了图像的本质特征,提取图像中的角点可以有效提高图像处理速度与精准度.所以对于整张图像来说特别重要,角点检测与提取的越准确图像处理与分析结果就越接近真实.同时角点检测对真实环境下的对象识别.对象匹配都起到决定性作用.Harr角点检测是图像处理中角点提取的经典算法之一,应用范围广发,在经典的SIFT特征提取算法中Harr角点检测起到关键作用.通常对角点检测算法都有如下要求: 1. 基于灰度图像.能够自动调整运行稳定,检测出角点的数目. 2. 对噪声不敏感.有一定的噪声

寻找Harris、Shi-Tomasi和亚像素角点

Harris.Shi-Tomasi和亚像素角点都是角点,隶属于特征点这个大类(特征点可以分为边缘.角点.斑点). 一.Harris角点检测是一种直接基于灰度图像的角点提取算法,稳定性较高,但是也可能出现有用信息丢失的情况. 函数:cornerHarris() void cv::cornerHarris ( InputArray  src,  //需要为8位单通道     OutputArray  dst,  //结果     int  blockSize, //领域大小     int  ksi