C++ 使用cornerHarris知道拐角的编号
如何知道cornerHarris计算的角数?我编写的函数如下:C++ 使用cornerHarris知道拐角的编号,c++,opencv,C++,Opencv,如何知道cornerHarris计算的角数?我编写的函数如下: ... Mat gray; cvtColor( img, gray, CV_BGR2GRAY ); int thresh = 160; Mat dst, dst_norm, dst_norm_scaled; dst = Mat::zeros( img.size(), CV_32FC1 ); // Detector parameters int blockSize =
...
Mat gray;
cvtColor( img, gray, CV_BGR2GRAY );
int thresh = 160;
Mat dst, dst_norm, dst_norm_scaled;
dst = Mat::zeros( img.size(), CV_32FC1 );
// Detector parameters
int blockSize = 2;
int apertureSize = 3;
double k = 0.04;
// Detecting corners
cornerHarris( gray, dst, blockSize, apertureSize, k, BORDER_DEFAULT );
// Normalizing
normalize( dst, dst_norm, 0, 255, NORM_MINMAX, CV_32FC1, Mat() );
convertScaleAbs( dst_norm, dst_norm_scaled );
cornerHarris
不计算特定数量的拐角。它将创建一个新图像dst
,该图像的大小与原始图像的灰度值相同。您可以定义一个阈值,从该值中可以找到角点。如果将阈值定义为更小,您将拥有更多的角点。
在本例中,您可以找到预定义值thresh
的角点,如下所示:
for( int j = 0; j < dst_norm.rows ; j++ ){
for( int i = 0; i < dst_norm.cols; i++ ){
if( (int) dst_norm.at<float>(j,i) > thresh ){
/* Whatever your would like to do with that corner */
}
}
}
for(int j=0;j阈值){
/*不管你想对那个角落做什么*/
}
}
}
有关更多信息,请参阅此部分。如果使用计数器增加循环中的值,则返回给我的值正好两次。为什么?如果我写:for(int j=0;jthresh){count+=1;}
精化后,count的值是两次。如果您所说的两次是指count==2
,则表示它在给定的阈值内找到了两个角点。如果您的期望值高于此值,则可能需要降低thresh
。可能我无法解释。如果除了增加计数器外,在点I周围设计一个圆,得到n个圆,计数器为2*n,打印I
和j
的值,看看每个圆是否有两个非常接近的值。可能它实际上画了两个非常接近的圆。所以你得到了两个非常接近的角,实际上只有一个。