如何计算图像中角落的数量?

时间:2016-01-06 16:55:48

标签: c++ opencv visual-studio-2012 image-processing computer-vision

我想计算计算机图像中的角点数(使用Microsoft Paint等工具创建的简单图像)。例如,如果我绘制一个正方形的图片,我希望程序返回角数,在这种情况下为4。

我在Microsoft Visual Studio 2012中使用Open CV 2.4.11 for C ++。

我使用Harris Corner探测器来显示图像中的角落。这是我用于该计划的教程:http://docs.opencv.org/2.4/doc/tutorials/features2d/trackingmotion/harris_detector/harris_detector.html

另外,我想知道如何找到边缘(不是角落)的终点?例如,如果图像包含线段,程序应该将端点数返回为2.我应该使用什么函数?

请解决此问题。我将在项目中使用此功能。

非常感谢您的帮助。

P.S:我是OpenCV的学生和初学者。

2 个答案:

答案 0 :(得分:2)

如果输入是一个简单的计算机生成图像,一个可行的选择是使用阈值和轮廓检测。

提取轮廓后(作为点矢量),您可以使用approxPolyDP函数来近似检测到的轮廓(达到用户定义的精度)。在近似之后,输出轮廓中的点数是拐角的数量(或者在开放轮廓的情况下为端点)。

总而言之,您需要的OpenCV功能是: thresholdfindContoursapproxPolyDP

答案 1 :(得分:0)

要计算角落,您可以使用链接中提供的代码段,它们在角落上绘制圆圈(只需做一些小改动)

int thresh = 200;
int corner_count = 0;

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) {
      corner_count++;
    }
  }
}