我想计算计算机图像中的角点数(使用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的学生和初学者。答案 0 :(得分:2)
如果输入是一个简单的计算机生成图像,一个可行的选择是使用阈值和轮廓检测。
提取轮廓后(作为点矢量),您可以使用approxPolyDP
函数来近似检测到的轮廓(达到用户定义的精度)。在近似之后,输出轮廓中的点数是拐角的数量(或者在开放轮廓的情况下为端点)。
总而言之,您需要的OpenCV功能是: threshold, findContours 和approxPolyDP。
答案 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++;
}
}
}