有没有像“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提取图像中的圆,从而可以得到圆心坐标?

在 OpenCV 中自动检测和裁剪 ROI

opencv 检测直线 线段 圆 矩形

有没有像 websocket 但不需要像 node 这样的框架的东西?

UIGestureRecognizer 状态。为啥没有像“空闲”这样的状态?

android上有没有像fiddler或wireshark这样的http代理?