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

如何像matlab一样在opencv中检测角点?,matlab,opencv,image-processing,Matlab,Opencv,Image Processing,我用MATLAB写了一段代码,现在想把它转换成openCV。我面临的问题是,在MATLAB中,角点检测是通过一个简单的corner()命令完成的,它以检测到的角点的(x,y)坐标数组的形式给出输出。 现在openCV文档为我提供了一些信息。 使用cornerHarris()函数时存在两个问题 它没有给我角点的(x,y)坐标 我必须为每个图像选择不同的阈值,而MATLAB中的corner()则是自己做的 由于我是openCV的新手,因此任何能够完成这两项功能的函数都会非常受欢迎。我认为openCV

我用MATLAB写了一段代码,现在想把它转换成openCV。我面临的问题是,在MATLAB中,角点检测是通过一个简单的
corner()
命令完成的,它以检测到的角点的(x,y)坐标数组的形式给出输出。
现在openCV文档为我提供了一些信息。
使用
cornerHarris()
函数时存在两个问题

  • 它没有给我角点的(x,y)坐标
  • 我必须为每个图像选择不同的阈值,而MATLAB中的
    corner()
    则是自己做的
    由于我是openCV的新手,因此任何能够完成这两项功能的函数都会非常受欢迎。

    我认为openCV中最相似的函数是:

    goodFeaturesToTrack
    
    代码如下:

    #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;
    }
    
    #pragma一次
    #包括
    #包括
    #包括
    #包括“opencv2/opencv.hpp”
    使用名称空间std;
    使用名称空间cv;
    //----------------------------------------------------------
    //主要
    //----------------------------------------------------------
    int main(int argc,char*argv[])
    {
    //src图像
    Mat-src;
    //dst图像
    Mat-dst;
    //图像加载
    姓名(以下简称“结果”);
    namedWindow(“src”);
    src=imread(“d:\\ImagesForTest\\lena.jpg”,0);
    cv::cvtColor(src、dst、cv::COLOR_GRAY2BGR);
    垫角;
    cv::良好的轨道特性(src,转角,50,0.01,20.0);
    
    对于(int i=0;i如前所述
    goodFeaturesToTrack()
    方法将为您提供具有
    x(即列索引)
    y(即行索引)

    请参阅下面的代码:

    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;
        }
    
    
    }
    
    void goodFeatureToTrack(Mat Vx)
    { 
    ///Shi-Tomasi算法的参数
    向量向量;
    int max=100;
    双质量水平=0.01;
    双心距=10;
    int blockSize=3;
    bool-usehrisdetector=false;
    双k=0.04;
    良好的跟踪特性(Vx、cornersVx、maxCorners、qualityLevel、MindDistance、Mat()、块大小、useHarrisDetector、k);
    
    对于(int i=0;我曾经看到你在使用
    #pragma
    。我在使用
    pragma
    东西时遇到问题,我在这里提到了我的问题,你可以安全地评论/删除它。不,不……我不是问你这篇文章……我还有一个项目想使用“pragma”但是我面临一些问题…所以你能帮我吗…我已经把我的问题贴在这里了,谢谢。你帮了我很大的忙。