【问题标题】:Image processing how to detect specific custom shape in image图像处理如何检测图像中的特定自定义形状
【发布时间】:2020-06-25 23:36:30
【问题描述】:

我想检测一个特定的形状,它是 2 个五边形和一个正方形的组合。然而,正方形的边应该是五边形的 3 倍左右,以匹配如图所示的有效形状。

我正在根据自己的要求学习不同的图像处理技术。

  1. 轮廓检测:问题是知道有 7 个角是不够的,因为 x : 3x 需要验证。

  2. Haar 特征:问题是图像由背景组成,并且这些对象内有文本。所以我认为 haar 不会是最佳方法。

我的想法

我想我可以检测线角并使用边长我可以做一些数学运算并识别图像。是否有任何图像处理技术使用数学距离、比例、位置来识别对象?

原图

匹配

不匹配

【问题讨论】:

  • 您可以添加没有标记的原始输入图像吗?一个简单的方法是使用角点检测+轮廓区域过滤
  • @nathancy 我添加了一张图片,基本上它是一张名片。我想检测这个形状。你能解释一下吗。看起来很有趣
  • 是否还有其他“不匹配”形状的图像?
  • @nathancy yes added.basically 我想从检测中忽略这张卡
  • 是的,所以角点检测方法并没有真正奏效。另一种似乎可行的方法是使用轮廓近似+轮廓区域过滤。我添加了一个可能的解决方案

标签: image opencv image-processing computer-vision object-detection


【解决方案1】:

这是一个简单的方法:

  1. 获取二值图像。加载图像,转换为灰度,Gaussian blur,然后Otsu's threshold

  2. 过滤所需轮廓。我们find contours 然后使用contour approximation + contour area 的组合进行过滤。观察到形状具有较大的面积差异,我们可以使用预定的阈值区域来识别两者。


输入->二进制图像->检测到的形状

结果

Match

输入->二进制图像->检测到的形状

结果

No Match

由于你没有指定语言,我用 Python 实现

import cv2
import numpy as np

# Load image, grayscale, Gaussian blur, Otsus threshold
image = cv2.imread('1.png')
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
blur = cv2.GaussianBlur(gray, (3,3), 0)
thresh = cv2.threshold(blur, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)[1]

# Find contours
cnts = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
cnts = cnts[0] if len(cnts) == 2 else cnts[1]
for c in cnts:
    peri = cv2.arcLength(c, True)
    approx = cv2.approxPolyDP(c, 0.04 * peri, True)
    area = cv2.contourArea(c)
    # Filter using contour approximation and area filtering (Remove small noise)
    if len(approx) > 4 and len(approx) < 8 and area > 200:
        # This is the larger version
        if area >= 5500:
            print('Match')
        # Smaller version
        elif area < 5500:
            print('No Match')
        cv2.drawContours(image, [c], -1, (255,0,12), 3)

cv2.imshow('thresh', thresh)
cv2.imshow('image', image)
cv2.waitKey()     

【讨论】:

  • 这真的很有趣,我会测试代码。谢谢
  • 我在这里遇到了一个小问题。有没有办法避免错误检测。例如,这个形状与要求的形状完全不同,但它已被检测到imgur.com/uGsCrXT
猜你喜欢
  • 1970-01-01
  • 2020-05-25
  • 1970-01-01
  • 1970-01-01
  • 2021-06-17
  • 2015-09-01
  • 1970-01-01
  • 2021-09-16
  • 2011-07-28
相关资源
最近更新 更多