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