Python 是否可以在OpenCV中将一个图像粘贴到另一个图像上?
我是OpenCv的新手,我正在创建一个程序,使用GrabCut算法将鞋子从背景中分割出来,然后我想将鞋子粘贴到白色背景上,但我在这方面很努力 我尝试了cv2.add()将这两个图像添加到一起,但这两个图像的大小必须相同,我不能保证,因为程序会提示用户上传图像 我还尝试了whiteBgImg=255-grabCutImg在鞋子不在的地方使背景变白,但这似乎会影响最终图像,这是一个问题,因为我需要对图像执行特征检测和匹配 提前感谢您的建议!:) 原始图像:Python 是否可以在OpenCV中将一个图像粘贴到另一个图像上?,python,opencv,image-processing,Python,Opencv,Image Processing,我是OpenCv的新手,我正在创建一个程序,使用GrabCut算法将鞋子从背景中分割出来,然后我想将鞋子粘贴到白色背景上,但我在这方面很努力 我尝试了cv2.add()将这两个图像添加到一起,但这两个图像的大小必须相同,我不能保证,因为程序会提示用户上传图像 我还尝试了whiteBgImg=255-grabCutImg在鞋子不在的地方使背景变白,但这似乎会影响最终图像,这是一个问题,因为我需要对图像执行特征检测和匹配 提前感谢您的建议!:) 原始图像: 最终图像(在grabcut和whiteB
最终图像(在grabcut和whiteBgImg=255-grabCutImg应用后):如果要将一个图像放在另一个图像的前面,可以按如下操作:
back_img[y_start:y_end,x_start:x_end] = front_img[y_start:y_end,x_start:x_end]
如果要在y轴上浓缩图像,图像的大小必须相同。为此,您可以查看或创建一个空白图像,以向图像添加填充,以及我在第一个方法中说过的“如果您想将一个图像放在另一个图像之前”。在Python/OpenCV中有一种方法可以做到这一点 请注意,我反转了您的图像以恢复原始图像。如果在反转之前先从实际原稿开始,则跳过反转。
- 读取输入并反转
- 变灰
- 制作面具的门槛
- 创建输入大小的白色图像
- 将两者混合在一起,用遮罩将鞋盖在白色上,以控制显示哪种颜色
- 保存结果
反向输入以恢复原始状态: 遮罩(阈值化后清洁边界): 结果:
您的Grabcut鞋已经有了白色背景。请澄清或张贴正确的图片。也许你主持图片的地方将其更改为不支持透明度的JPG。嗨,是的,它有白色背景,但它反转了鞋子的颜色,这是一个问题,因为我需要它是原始颜色。我正在寻找解决这个问题或替代解决方案(可能添加带有白色背景图像的grabcut图像),我在下面发布了一个解决方案。如果您跳过我对输入的反转,并提供没有反转的原始输入,那么我的脚本应该按照您的要求工作。非常感谢!
import cv2
import numpy as np
# load image
img = cv2.imread("shoe_inverted.jpg")
# invert the polarity
img = 255 - img
# convert to gray
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# threshold image and make 3 channels as mask
mask = cv2.threshold(gray, 32, 255, cv2.THRESH_BINARY)[1]
mask = cv2.merge([mask,mask,mask])
# create white image for background of result
white = np.full_like(img, (255,255,255))
# apply mask to img and white
result = np.where(mask!=0, img, white)
# write result to disk
cv2.imwrite("shoe_inverted_inverted.jpg", img)
cv2.imwrite("shoe_mask.jpg", mask)
cv2.imwrite("shoe_result.jpg", result)
cv2.imshow("IMAGE", img)
cv2.imshow("MASK", mask)
cv2.imshow("RESULT", result)
cv2.waitKey(0)
cv2.destroyAllWindows()