我用MATLAB编写了一个代码,现在想把它转换成openCV。我面临的问题是,在MATLAB中,角点检测是通过简单的corner()命令完成的,它以检测到的角点的(x,y)坐标数组的形式给出了输出。
现在,openCV文档给了我这个例子。
使用cornerHarris()函数有两个问题。
corner()用来自己实现这一点。做这两件事的任何功能都会受到很大的赞赏,因为我是openCV的新手。
发布于 2014-02-11 19:06:12
我认为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;
}其结果是:

发布于 2014-02-11 19:49:49
如前所述,goodFeaturesToTrack()方法将给出具有x (i.e. column index)和y(i.e. row index)的角点
见下面的代码:
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;
}
}https://stackoverflow.com/questions/21709956
复制相似问题