是否有一种算法可以在图像中找到已知大小和形状的对象?

Posted

技术标签:

【中文标题】是否有一种算法可以在图像中找到已知大小和形状的对象?【英文标题】:Is there an algorithm to find known size and shape object in an image? 【发布时间】:2021-12-17 10:00:13 【问题描述】:

由于图像处理和计算机视觉不属于我的研究领域,我很难找到一种算法,该算法可以识别某些图像中已知大小和比例的矩形的位置,从而实现流程自动化。

这些是包含一些圆圈和只有一个或没有一个带有圆角的白色矩形的灰度图像,如下图示例所示。

可以找到 3 个具有“相同”矩形的不同图像

谢谢

【问题讨论】:

在两张图片中,那个矩形非常模糊。我认为这是一个标签,您编辑了图片以删除任何文本。你能照亮盘子让标签更加突出吗? 【参考方案1】:

试试 OpenCV,它代表 Open Computer Vision。免费。这是用 Python 编写的。

import cv2
import numpy as np

img = cv2.imread("C:\\Users\\mogar\\Desktop\\temp.jpg")
grayImage = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
ret, thresh = cv2.threshold(grayImage, 160, 255, cv2.THRESH_BINARY)
kernel = np.ones((5,5),np.uint8)
thresh = cv2.erode(thresh,kernel,iterations = 1)

#thresh = np.invert(thresh)

cv2.imshow("Threholded Image", thresh)
cv2.waitKey(0) & 0xFF == ord('q')
cv2.destroyAllWindows()

_, contours, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_NONE)
for cnts in contours:
    rect = cv2.minAreaRect(cnts)
    box = cv2.boxPoints(rect)
    box = np.int0(box)
    (x,y),(w,h),angle = rect
    w = int(w)
    h = int(h)
    area = w*h
    if area > 10000 and area < 100000:
        print("Area Check", area)
        cv2.drawContours(img, [box], 0, (0,0,255), 5)
        
        small = cv2.resize(img, (0,0), fx=0.3, fy=0.3)
        cv2.imshow("Contours", small)
        cv2.waitKey(0) & 0xFF == ord('q')
        cv2.destroyAllWindows()

您可能需要调整一些阈值和面积值,以便只包围矩形。您会注意到矩形现在没有完全封闭,这实际上是因为文本挡住了路并将矩形切成两半。如果你有一个干净的形象;我相信这会很好用。如果您有任何问题,请不要犹豫,但我可能需要一些时间才能回答。

【讨论】:

以上是关于是否有一种算法可以在图像中找到已知大小和形状的对象?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用计算机视觉在图像中找到形状?

在 R 中,是不是有一种算法可以创建大小大致相等的集群

使用 OpenCV 检测图像中已知形状/对象的方法

山脉识别算法

人们识别图像是靠形状,那AI是怎么识别图像的?

是否有一种快速算法可以将集合的所有分区生成为大小为 2 的子集(和一个大小为 1 的子集)?