【问题标题】:Make circular mask and put all values outside of mask to black制作圆形蒙版并将蒙版之外的所有值设置为黑色
【发布时间】:2020-11-14 20:36:56
【问题描述】:

我有一个狮子的彩色 jpg 图像。我在图像上绘制了一个白色圆圈,将此图像转换为灰度并定义了一个蒙版。最后,我想要一张只有白色圆圈内的原始像素的图像。我想我快到了,但我似乎无法弄清楚将掩码/白色圆圈之外的所有值设置为黑色的最后一步。这是我的代码:

import cv2

img = cv2.imread('lion_original.jpg')
center_coordinates = (120,50)
radius = 20
color = (255, 255 , 255)
thickness = -1
img = cv2.circle(img, center_coordinates, radius, color, thickness)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
cv2.imshow('try_mask', gray) 
mask = gray>254

【问题讨论】:

    标签: python opencv geometry mask


    【解决方案1】:

    您正在做什么,即将白色圆圈添加到原始图像,将其转换为灰度然后进行阈值处理是一个坏主意:该圆圈之外的像素可能具有大于您的阈值的值,并且那么它们也将包含在掩码本身中。快速解决方法是在黑色图像上创建白色圆圈。以下 sn-p 给出了我认为与您需要的结果相对应的结果:

    img = cv2.imread('A.jpg')
    center= (120,50)
    radius = 20 
    color = (255, 255 , 255)
    thickness = -1 
    final_image = cv2.circle(np.zeros_like(img), center, radius, color,     thickness).astype("uint8")
    final_image[final_image!=0]=img[final_image!=0]
    

    注意:如果您在可视化 final_image 时出现问题,请尝试将其标准化

    final_image=cv2.normalize(src=final_image, dst=None, alpha=0, beta=255, norm_type=cv2.NORM_MINMAX, dtype=cv2.CV_8U)
    

    在致电cv2.imshow()之前。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-11-06
      • 1970-01-01
      • 1970-01-01
      • 2019-10-24
      • 1970-01-01
      • 2020-02-21
      • 2023-04-02
      • 1970-01-01
      相关资源
      最近更新 更多