OpenCV - 检测矩形或五边形

Posted

技术标签:

【中文标题】OpenCV - 检测矩形或五边形【英文标题】:OpenCV - Detection of rectangle or pentagon 【发布时间】:2016-06-08 00:23:02 【问题描述】:

如何使用 OpenCV 从图像中检测矩形或五边形?我有很多名片的图片,我必须检测它们的侧面。名片实际上是矩形的,但有时名片的角会被裁剪。我尝试过HoughLinesP() 功能,但它只是在寻找线条。

我必须检测图片上方的形状,这意味着无论该形状是矩形还是五边形,我都需要检测名片边缘,并且只需要从图像中裁剪名片对象。


预期结果:

【问题讨论】:

“它只找到线条” 这就是线条的霍夫变换。请展示几张图片和一些代码,见How to Ask 【参考方案1】:

您可以按照以下步骤操作:

    使用findContours查找图像中的轮廓。

    执行approxPoly 获取图像中所有轮廓的多边形形状。

    检查近似轮廓大小(多边形的边数):

    如果边数是 4 => 矩形

    如果边数是5 =>五边形

代码在 python 中,但应该很容易转换为 C++:

import cv2

gray = cv2.imread('img.png',0)

ret,thresh = cv2.threshold(gray,127,255,1)

contours,h = cv2.findContours(thresh,1,2)

for cnt in contours:
        approx = cv2.approxPolyDP(cnt,0.01*cv2.arcLength(cnt,True),True)
    if len(approx)==5:
        print "pentagon"
    elif len(approx)==4:
        print "rectangle"

【讨论】:

这仅适用于琐碎的图像。但这是一个开始...... ;D 你能发布一个 sn-p 来展示如何做到这一点吗? @Miki,我不知道在您的情况下什么是“微不足道的图像”,如果您有可能不适合他们的图像示例,请编辑您的问题并链接它们。 这不是我的问题;D【参考方案2】:

您可以尝试使用MatchShapes函数。

Here is an example.

我还找到了一个教程,实现了类似于@Dr.Haimovitz 建议的方法: 这是here。

【讨论】:

以上是关于OpenCV - 检测矩形或五边形的主要内容,如果未能解决你的问题,请参考以下文章

opencv---(腐蚀膨胀边缘检测轮廓检索凸包多边形拟合)

OpenCV中的四边形运算(一)——最小外接矩形

Python OpenCV实现鼠标绘制矩形框和多边形

Python OpenCV实现鼠标绘制矩形框和多边形

使用卷积神经网络进行四边形/矩形检测的想法

在python中的openCV中绘制一个旋转的框