有没有像“cvHoughCircles()”这样的opencv函数来进行正方形检测?
Posted
技术标签:
【中文标题】有没有像“cvHoughCircles()”这样的opencv函数来进行正方形检测?【英文标题】:Are there any opencv function like "cvHoughCircles()" for square detection? 【发布时间】:2012-06-13 12:42:49 【问题描述】:有没有像“cvHoughCircles()”这样的opencv函数可以用于正方形检测编程 对于圆形检测程序 CvSeq* circles = cvHoughCircles() 但我找不到正方形检测。
【问题讨论】:
鉴于检测正方形比检测圆形要容易得多,如果将平方查找留给编码人员作为练习,我不会感到惊讶。您基本上必须找到以近似直角相交的长共线连接段,并且您可以使用一些过滤和边缘检测器生成这些段。你需要做的大部分工具应该已经在 OpenCV 中了。 要做到这一点,您将使用 Hough 变换进行线条,这也在 OpenCV 中实现;) 请参考:***.com/questions/10533233/… 在该链接下您可以尝试三到四种方法。享受:) 【参考方案1】:您不需要任何单独的功能。 OpenCV自带正方形检测样本(实际检测矩形,你可以添加约束,所有边的长度应该相等以获得正方形)。
查看此链接:squares.cpp
关于这段代码在这个 SOF 中的工作方式有一个很好的解释:How to identify square or rectangle with variable lengths and width by using javacv?
以下是应用该代码时得到的结果。
【讨论】:
bt 当我尝试运行程序时,由于 #include "opencv2/core/core.hpp" 和 **#include "opencv2/ 而显示 2 个错误imgproc/imgproc.hpp" ** ///// 错误 - 致命错误 C1083: 无法打开包含文件: 'opencv2/core/core.hpp': 没有这样的文件或目录。你能告诉我解决这个问题的方法吗错误 很抱歉我没有使用 C++。可以将它作为一个单独的问题提出,说你的新问题是这个问题的延续。 您应该更改这些包含,以便它们的路径指向您安装这些文件的位置。它应该是相对路径,而不是完整路径。 您能解释一下如何计算这些已识别多边形的宽度和高度吗? 如果你检查,你可以从3个点看到找角。您可以找到两个连续点之间的距离。或者为正方形找到边界矩形或旋转矩形。它直接为您提供宽度和高度。但如果它不是一个精确的矩形可能是错误的【参考方案2】:没有直接求平方的opencv函数。
但是你可以使用 houghLines 函数,它检测线,并找到具有 90 度角的线之间的交点。
要测量线之间的角度,我可以为您提供 Java 代码 sn-p:
// returns cosine of angle between line segments 0 to 1, and 0 to 2.
// pt0 is the vertex / intersection
// angle of 90 degrees will have a cosine == 0
public static final double angleCosine(Point pt1, Point pt0, Point pt2)
double dx1 = pt1.x - pt0.x;
double dy1 = pt1.y - pt0.y;
double dx2 = pt2.x - pt0.x;
double dy2 = pt2.y - pt0.y;
return (dx1 * dx2 + dy1 * dy2) / Math.sqrt((dx1 * dx1 + dy1 * dy1) * (dx2 * dx2 + dy2 * dy2) + 1e-10);
关于 houghLines 的文档:
http://docs.opencv.org/modules/imgproc/doc/feature_detection.html?highlight=houghlines#houghlines
【讨论】:
以上是关于有没有像“cvHoughCircles()”这样的opencv函数来进行正方形检测?的主要内容,如果未能解决你的问题,请参考以下文章
OpenCV中利用CvHoughCircles提取图像中的圆,从而可以得到圆心坐标?
有没有像 websocket 但不需要像 node 这样的框架的东西?