簡體   English   中英

opencv - python 中重疊圓圈之間的黑色區域

[英]black area between overlapped circles in opencv - python

我正在實施“氣泡算法”進行分類識別分析。 在這個算法中,我們必須用高斯圓制作掩碼。 圓心將是 1(255),它會在半徑上減小,這將是 0。當我將圓圈放在彼此上以創建蒙版時,我遇到了問題,它會在圓圈之間放置一條黑線,我無法刪除它。 這是我的代碼:

def make_gaussian(circle_center, Gaussian_base):
for t in range(circle_center[1] - radius, circle_center[1] + radius):
    for tt in range(circle_center[0] - radius, circle_center[0] + radius):
        distance = int(compute_distance(tt, circle_center[0], t, circle_center[1]))
        if distance < radius  :
            value = int(((radius - distance) * (1 / radius)) * 255)
            if Gaussian_base[t][tt].mean() < value:
            Gaussian_base[t][tt] = [value, value, value]
return Gaussian_base

Gaussian_base = np.zeros((height, width, 3), np.uint8)
for s in centers:
    #xmin, ymin, xmax, ymax
    Gaussian_base = make_gaussian(s, Gaussian_base)
cv2.imwrite('gaussianMask.jpg', Gaussian_base)

您可以將此列表用作中心:

centers = [(139, 102), (223, 193), (94, 385), (205, 301), (90, 147), (190, 209), (45, 349), (193, 259), (110, 343), (159, 99)]

而 output 是這樣的:在此處輸入圖像描述問題是兩個重疊圓圈之間的黑線(區域)應該被移除,並且連接區域應該是連續的。

嘗試這個...

def make_gaussian(circle_center, Gaussian_base):
    for t in range(circle_center[1] - radius, circle_center[1] + radius):
        for tt in range(circle_center[0] - radius, circle_center[0] + radius):
            distance = int(compute_distance(tt, circle_center[0], t, circle_center[1]))
            if distance < radius  :
                value = int(((radius - distance) * (1 / radius)) * 200)
                #if Gaussian_base[t][tt].mean() < value:
                Gaussian_base[t][tt] += np.array([value, value, value], dtype=np.uint8)
    return Gaussian_base

您張貼的圖片中的“黑線”在球之間是一種視錯覺 這是一個局部最小值,你的眼睛可以識別。

在圖像編輯器中打開您的圖像。 拿取色器。 沿着球移動並進入“黑線”。 指示的顏色/亮度平滑移動。 它不會下降,也不會變黑。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM