gpt4 book ai didi

python - 如何在此类图像中找到最大的空白区域?

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

我想在类似于我在下面发布的图像中找到空白区域(黑色区域),我在其中散布了随机大小的 block 。

enter image description here

通过空白,我指的是这些可能的开放领域(我对该区域没有特定的下限,但我想提取图像中存在的前 3-4 个最大的区域。)也没有限制它们可以采用的几何形状,但这些空白空间不能包含任何蓝色 block 。

enter image description here

解决这个问题的最佳方法是什么?

到目前为止我做了什么:

我的原始图像实际上是这样的。我确定了所有的点,根据一定的距离阈值对它们进行分组,并在它们周围应用了一个凸包。我不确定如何进一步进行。任何帮助将不胜感激。谢谢!

enter image description here

最佳答案

这是在 Python/OpenCV 中使用距离变换找到 X 之间最大欧氏距离的一种方法。

输入:

enter image description here

import cv2
import numpy as np
import skimage.exposure

# read image
img = cv2.imread('xxx.png')

# convert to gray
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# threshold to binary and invert so background is white and xxx are black
thresh = cv2.threshold(gray, 128, 255, cv2.THRESH_BINARY)[1]
thresh = 255 - thresh

# add black border around threshold image to avoid corner being largest distance
thresh2 = cv2.copyMakeBorder(thresh, 1,1,1,1, cv2.BORDER_CONSTANT, (0))
h, w = thresh2.shape

# create zeros mask 2 pixels larger in each dimension
mask = np.zeros([h + 2, w + 2], np.uint8)

# apply distance transform
distimg = thresh2.copy()
distimg = cv2.distanceTransform(distimg, cv2.DIST_L2, 5)

# remove excess border
distimg = distimg[1:h-1, 1:w-1]

# get max value and location in distance image
min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(distimg)

# scale distance image for viewing
distimg = skimage.exposure.rescale_intensity(distimg, in_range='image', out_range=(0,255))
distimg = distimg.astype(np.uint8)

# draw circle on input
result = img.copy()
centx = max_loc[0]
centy = max_loc[1]
radius = int(max_val)
cv2.circle(result, (centx, centy), radius, (0,0,255), 1)
print('center x,y:', max_loc,'center radius:', max_val)

# save image
cv2.imwrite('xxx_distance.png',distimg)
cv2.imwrite('xxx_radius.png',result)

# show the images
cv2.imshow("thresh", thresh)
cv2.imshow("thresh2", thresh2)
cv2.imshow("distance", distimg)
cv2.imshow("result", result)
cv2.waitKey(0)
cv2.destroyAllWindows()

距离变换图像:

enter image description here

到 Xs 的最大距离区域:

enter image description here

文本信息:

中心 x,y: (179, 352) 半径:92.5286865234375

关于python - 如何在此类图像中找到最大的空白区域?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67421025/

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