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

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

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


预期结果:

【问题讨论】:

  • “它只找到线条” 这就是线条的霍夫变换。请展示几张图片和一些代码,见How to Ask

标签: python c++ opencv image-processing opencv3.0


【解决方案1】:

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

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

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

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

    如果边数是 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多