首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何像matlab一样检测opencv中的角点?

如何像matlab一样检测opencv中的角点?
EN

Stack Overflow用户
提问于 2014-02-11 18:21:19
回答 2查看 680关注 0票数 1

我用MATLAB编写了一个代码,现在想把它转换成openCV。我面临的问题是,在MATLAB中,角点检测是通过简单的corner()命令完成的,它以检测到的角点的(x,y)坐标数组的形式给出了输出。

现在,openCV文档给了我这个例子

使用cornerHarris()函数有两个问题。

  1. 它不能给出角点的(x,y)坐标。
  2. 我必须为每一幅图像选择不同的阈值,而MATLAB中的corner()用来自己实现这一点。

做这两件事的任何功能都会受到很大的赞赏,因为我是openCV的新手。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-02-11 19:06:12

我认为OpenCV中最相似的功能是:

代码语言:javascript
复制
goodFeaturesToTrack

以下是代码:

代码语言:javascript
复制
#pragma once
#include <string>
#include <iostream>
#include <vector>
#include "opencv2/opencv.hpp"
using namespace std;
using namespace cv;
//----------------------------------------------------------
// MAIN
//----------------------------------------------------------
int main(int argc, char* argv[])
{
    // src image
    Mat src;
    // dst image
    Mat dst;
    // Image loading
    namedWindow("result");
    namedWindow("src");
    src=imread("d:\\ImagesForTest\\lena.jpg",0);    

    cv::cvtColor(src,dst,cv::COLOR_GRAY2BGR);

    Mat corners;
    cv::goodFeaturesToTrack(src,corners,50,0.01,20.0);

    for(int i=0;i<corners.rows;++i)
    {
        circle(dst,cv::Point(corners.at<float>(i,0),corners.at<float>(i,1)),3,Scalar(255,0,0),-1,CV_AA);
    }

    imshow("src",src);
    imshow("result",dst);
    //----------------------------------------------------------
    // Wait key press
    //----------------------------------------------------------
    waitKey(0);
    destroyAllWindows();
    return 0;
}

其结果是:

票数 3
EN

Stack Overflow用户

发布于 2014-02-11 19:49:49

如前所述,goodFeaturesToTrack()方法将给出具有x (i.e. column index)y(i.e. row index)的角点

见下面的代码:

代码语言:javascript
复制
void goodFeatureToTrack(Mat Vx) 
{ 

    /// Parameters for Shi-Tomasi algorithm
    vector<Point2f> cornersVx;
    int maxCorners = 100;
    double qualityLevel = 0.01;
    double minDistance = 10;
    int blockSize = 3;
    bool useHarrisDetector = false;
    double k = 0.04;

    goodFeaturesToTrack( Vx, cornersVx, maxCorners, qualityLevel, minDistance, Mat(), blockSize, useHarrisDetector, k );



    for(int i=0; i<cornersVx.size(); i++)
    {
        cout<<"\n Point for VX:  "<<cornersVx[i].x<<"  "<<cornersVx[i].y;
    }


}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21709956

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档