如何围绕图像中的点绘制正方形

问题描述 投票:0回答:2

我有一个带有白点的二进制图像。如何使用OpenCV在这些点周围识别并绘制正方形?

问题是积分非常小,到目前为止所有尝试都未能找到所有要点。

这是输入图像:

这是我感兴趣的结果:

是否有可能使用OpenCV的功能?如果没有,(因为大小),最有效的方法是什么?

python opencv image-processing
2个回答
0
投票
  1. 在尺寸为5的图像上应用dilate
  2. 如果点之间的距离<10,它们将连接到一个大点。
  3. 如果距离> 10,它将按原样分开。
  4. Find contours的结果。
  5. 获取每个轮廓的minAreaRect
  6. 完成。

0
投票

使用以下方法,您可以找到解决方案。

解决方案的完整代码:

import cv2
import numpy as np
img = cv2.imread('test.jpg', 0)
output_img = img.copy()
cv2.threshold(img,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU,img)

kernel = np.ones((50,70), np.uint8)
img = cv2.dilate(img, kernel, iterations=1)


im2,contours, hier = cv2.findContours(img.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
for c in contours:
    # get the bounding rect
    x, y, w, h = cv2.boundingRect(c)
    # draw a white rectangle to visualize the bounding rect
    cv2.rectangle(output_img, (x, y), (x + w, y + h), 255, 1)

cv2.imshow('output',output_img)
cv2.waitKey(0)
  • 首先,您必须根据您的要求创建内核。
  • 内核大小越大,属于集群的点数就越高。
  • 然后使用cv2.dilate方法,你应该使用创建的内核扩大图像。
  • 之后你应该找到扩张图像的轮廓并获得这些轮廓的边界矩形。
  • 一个矩形可以视为一个簇。你可以使用kernel = np.ones((50,70), np.uint8)更改簇大小。在这里它是50 x 70。

OUTPUT:

© www.soinside.com 2019 - 2024. All rights reserved.