制作圆形遮罩并将遮罩外的所有值设为黑色
Make circular mask and put all values outside of mask to black
我有一张狮子的彩色 jpg 图像。我在图像上画了一个白色圆圈,将此图像转换为灰度并定义了一个遮罩。最后,我想要一个只有白色圆圈内原始像素的图像。我想我快到了,但我似乎无法弄清楚将 mask/white 圈外的所有值都设为黑色的最后一步。这是我的代码:
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
您正在做的事情是,将白色圆圈添加到原始图像,将其转换为灰度,然后设置阈值是一个坏主意:该圆圈之外的像素值可能大于您的阈值,然后它们也将包含在蒙版本身中。快速修复是在黑色图像上创建白色圆圈。以下代码段给出了我认为符合您需要的结果:
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()
.
之前
我有一张狮子的彩色 jpg 图像。我在图像上画了一个白色圆圈,将此图像转换为灰度并定义了一个遮罩。最后,我想要一个只有白色圆圈内原始像素的图像。我想我快到了,但我似乎无法弄清楚将 mask/white 圈外的所有值都设为黑色的最后一步。这是我的代码:
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
您正在做的事情是,将白色圆圈添加到原始图像,将其转换为灰度,然后设置阈值是一个坏主意:该圆圈之外的像素值可能大于您的阈值,然后它们也将包含在蒙版本身中。快速修复是在黑色图像上创建白色圆圈。以下代码段给出了我认为符合您需要的结果:
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()
.