gpt4 book ai didi

图像处理如何检测图像中的特定自定义形状

转载 作者:行者123 更新时间:2023-12-02 16:09:46 25 4
gpt4 key购买 nike

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

enter image description here

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

  • 轮廓检测:问题是知道有 7 个角是不够的,因为 x : 3x 需要验证。
  • Haar 特征:问题是图像由背景组成,并且这些对象内部有文本。所以在我看来 haar 不是最佳方法。

  • 我的点子

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

    原图

    匹配

    enter image description here

    不匹配

    enter image description here

    最佳答案

    这是一个简单的方法:

  • 获取二值图像。 加载图片,转灰度,Gaussian blur ,然后 Otsu's threshold .
  • 过滤所需的轮廓。 我们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()

    关于图像处理如何检测图像中的特定自定义形状,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60679173/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com