保持物体的所有细节以最流畅和最有效的方式去除形状
keeping all details of object removing the shape in the smoothest and most efficient way
我有一些图像,我也有它们的遮罩(图中为绿色)。我在对象周围生成一个边界框(图中的虚线),并且只拍摄图像的这一部分。
现在我想用像素替换灰色部分,以最自然的方式扩展汽车颜色。例如,取与最近的汽车像素相同的颜色。最后我想要一张包含所有汽车细节但没有任何形状的图像。
我尝试简单地反转蒙版,使蒙版代表汽车周围的灰色像素,然后使用 opencv 中的 'inpaint' 函数为这个新蒙版涂上足够的颜色:
result = cv2.inpaint(car_image,new_mask,50,cv2.INPAINT_NS)
效果不佳,因为我们仍然清楚地看到汽车周围的边界。
如有任何提示,我们将不胜感激。我正在处理 python,它需要非常高效,因为我有大量图像。
这是一个很好的工作解决方案,它的一个功能是给定一个在蒙版之外具有零值的图像,它输出一个类似的图像,其中选择最合适的颜色而不是零值,以便我们保留所有细节对象但删除形式:
#replace black pixel by smoothing with adequate color to keep all info, removing shape
def remove_shape_keep_all_info(img):
#create mask (s.t. Non-zero pixels indicate the area that needs to be inpainted)
mask_ = np.array([[1 if j==0 else 0 for j in i] for i in cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)]).astype('uint8')
kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (7,7))
mask_ = cv2.dilate(mask_, kernel, iterations=4)
result = cv2.inpaint(img,mask_,5,cv2.INPAINT_TELEA) #,cv2.INPAINT_TELEA, INPAINT_NS
return (result)
我有一些图像,我也有它们的遮罩(图中为绿色)。我在对象周围生成一个边界框(图中的虚线),并且只拍摄图像的这一部分。
现在我想用像素替换灰色部分,以最自然的方式扩展汽车颜色。例如,取与最近的汽车像素相同的颜色。最后我想要一张包含所有汽车细节但没有任何形状的图像。
我尝试简单地反转蒙版,使蒙版代表汽车周围的灰色像素,然后使用 opencv 中的 'inpaint' 函数为这个新蒙版涂上足够的颜色:
result = cv2.inpaint(car_image,new_mask,50,cv2.INPAINT_NS)
效果不佳,因为我们仍然清楚地看到汽车周围的边界。
如有任何提示,我们将不胜感激。我正在处理 python,它需要非常高效,因为我有大量图像。
这是一个很好的工作解决方案,它的一个功能是给定一个在蒙版之外具有零值的图像,它输出一个类似的图像,其中选择最合适的颜色而不是零值,以便我们保留所有细节对象但删除形式:
#replace black pixel by smoothing with adequate color to keep all info, removing shape
def remove_shape_keep_all_info(img):
#create mask (s.t. Non-zero pixels indicate the area that needs to be inpainted)
mask_ = np.array([[1 if j==0 else 0 for j in i] for i in cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)]).astype('uint8')
kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (7,7))
mask_ = cv2.dilate(mask_, kernel, iterations=4)
result = cv2.inpaint(img,mask_,5,cv2.INPAINT_TELEA) #,cv2.INPAINT_TELEA, INPAINT_NS
return (result)