英文:
Remove/Erase object from image using python
问题
以下是您提供的内容的中文翻译:
我一直在尝试使用OpenCV从图像中删除/擦除用红色突出显示的对象
我已经取得了一些接近的结果,但它只是降低了对象的透明度
但我希望它完全消失。
以下是代码:
import numpy as np
import sys
input = sys.argv[1]
# 加载图像
img = cv2.imread(input)
# 定义要删除的对象的颜色范围
lower_red = np.array([0, 0, 200])
upper_red = np.array([50, 50, 255])
# 创建一个标识要删除对象的掩码
mask = cv2.inRange(img, lower_red, upper_red)
# 使用TELEA算法修复对象区域
inpaint = cv2.inpaint(img, mask, 3, cv2.INPAINT_TELEA)
# 保存修复后的图像
cv2.imwrite(input, inpaint)
英文:
I have been trying to Remove/Erase an object from image which is highlighted with red color using opencv
I have achieved a bit closer result but it's just reducing the transparency of the object
but i want it to make it completely invisible.
Here is the code:
import numpy as np
import sys
input = sys.argv[1]
# Load the image
img = cv2.imread(input)
# Define the color range of the object to be removed
lower_red = np.array([0, 0, 200])
upper_red = np.array([50, 50, 255])
# Create a mask that identifies the object to be removed
mask = cv2.inRange(img, lower_red, upper_red)
# Inpaint the object area using the TELEA algorithm
inpaint = cv2.inpaint(img, mask, 3, cv2.INPAINT_TELEA)
# Save the inpainted image
cv2.imwrite(input, inpaint)
答案1
得分: 2
以下是翻译好的内容:
"边缘可能存在问题,无法覆盖所有偏红的像素。您可以膨胀掩码:
import cv2
import numpy as np
import sys
input = sys.argv[1]
# 加载图像
img = cv2.imread(input)
# 定义要移除的对象的颜色范围
lower_red = np.array([0, 0, 150])
upper_red = np.array([100, 100, 255])
# 创建一个标识要移除的对象的掩码
mask = cv2.inRange(img, lower_red, upper_red)
# 使用TELEA算法修复对象区域
kernel = np.ones((5,5),np.uint8)
dilated_mask = cv2.dilate(mask,kernel,iterations = 1)
inpaint = cv2.inpaint(img, dilated_mask, 3, cv2.INPAINT_TELEA)
# 保存修复后的图像
cv2.imwrite('out_'+input, inpaint)
英文:
The mask may have problem on the edges, and not covering all red-ish pixels. You can dilated the mask:
import cv2
import numpy as np
import sys
input = sys.argv[1]
# Load the image
img = cv2.imread(input)
# Define the color range of the object to be removed
lower_red = np.array([0, 0, 150])
upper_red = np.array([100, 100, 255])
# Create a mask that identifies the object to be removed
mask = cv2.inRange(img, lower_red, upper_red)
# Inpaint the object area using the TELEA algorithm
kernel = np.ones((5,5),np.uint8)
dilated_mask = cv2.dilate(mask,kernel,iterations = 1)
inpaint = cv2.inpaint(img, dilated_mask, 3, cv2.INPAINT_TELEA)
# Save the inpainted image
cv2.imwrite('out_'+input, inpaint)
答案2
得分: 2
Firstly, you need to save your mask as an image so you can check how well it is selecting your reds:
首先,您需要将您的遮罩保存为图像,以便检查它是否正确选择了红色:
cv2.imwrite("mask.png", mask)
Secondly, you will probably find it more accurate to locate highly saturated reds (and greens etc) in HSL/HSV colourspace. So, have a look for other answers tagged [tag:opencv] and containing "HSV". You'll need
其次,您可能会发现在[HSL/HSV][1]颜色空间中更准确地定位高饱和度的红色(以及绿色等)。因此,请查看其他标记为[tag:opencv]并包含"HSV"的答案。您需要:
HSV = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
and be aware that reds wrap around zero, because the hue wheel is cyclic. See example here.
英文:
Firstly, you need to save your mask as an image so you can check how well it is selecting your reds:
cv2.imwrite("mask.png", mask)
Secondly, you will probably find it more accurate to locate highly saturated reds (and greens etc) in HSL/HSV colourspace. So, have a look for other answers tagged [tag:opencv] and containing "HSV". You'll need
HSV = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
and be aware that reds wrap around zero, because the hue wheel is cyclic. See example here.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论