【问题标题】:Why I'm facing PROBLEM square detection in image为什么我在图像中面临问题正方形检测
【发布时间】:2022-01-06 19:21:22
【问题描述】:

我正在尝试检测此Desire Image box detection 中所有带有红色标记的正方形形状,并且它们在此显示为红色正方形。 这是我的原始Image

这是我得到的代码,但它缺少一些方块。

import cv2
import numpy as np

image = cv2.imread('Music/1.bmp')

gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
blur = cv2.medianBlur(gray, 5)
sharpen_kernel = np.array([[-1,-1,-1], [-1,9,-1], [-1,-1,-1]])
sharpen = cv2.filter2D(blur, -1, sharpen_kernel)

thresh = cv2.threshold(sharpen,160,255, cv2.THRESH_BINARY_INV)[1]
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (3,3))
close = cv2.morphologyEx(thresh, cv2.MORPH_CLOSE, kernel, iterations=2)

cnts = cv2.findContours(close, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
cnts = cnts[0] if len(cnts) == 2 else cnts[1]

min_area = 100
max_area = 1500
image_number = 0
for c in cnts:
    area = cv2.contourArea(c)
    if area > min_area and area < max_area:
        x,y,w,h = cv2.boundingRect(c)
        ROI = image[y:y+h, x:x+w]
        cv2.imwrite('ROI_{}.png'.format(image_number), ROI)
        cv2.rectangle(image, (x, y), (x + w, y + h), (36,255,12), 2)
        image_number += 1

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

这是我的OUTPUT IMAGE 请帮助我如何根据已识别的正方形预测丢失的正方形位置?或者我们可以将上述算法修改为平方检测算法吗?

【问题讨论】:

    标签: python opencv computer-vision detection square


    【解决方案1】:

    首先,cv2.RETR_EXTERNAL 是查找方格的错误算法。它找到分离的区域,而不是连接的区域。将其更改为 cv2.RETR_TREE

    其次,您的最小/最大值太小了。这些方块大约是页面宽度的 1/12,这意味着这些方块大约为 120x120,即面积为 14,400。所以,设置

    min_area = 10000
    max_area = 15000
    

    通过这两个更改,我设法获得了大约一半的正方形。做得更好可能是细化模糊、锐化和阈值参数以获得更强的网格线。

    另一方面,您可以取出您确实找到的正方形并从中插入网格。你知道模式是什么。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-01-26
      • 1970-01-01
      • 2022-09-25
      • 2011-12-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多