是否可以在OpenCV中将一个图像粘贴到另一个图像上?

2024-06-28 15:16:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我是OpenCv的新手,我正在创建一个程序,使用GrabCut算法将鞋子从背景中分割出来,然后我想将鞋子粘贴到白色背景上,但我在这方面很努力

我尝试了cv2.add()将这两个图像添加到一起,但这两个图像的大小必须相同,我不能保证,因为程序会提示用户上传图像

我还尝试了whiteBgImg=255-grabCutImg在鞋子不在的地方使背景变白,但这似乎会影响最终图像,这是一个问题,因为我需要对图像执行特征检测和匹配

提前感谢您的建议!:)

原始图像: Original Shoe

最终图像(在grabcut和whiteBgImg=255-grabCutImg应用后):Grabcut Shoe


Tags: 图像程序算法add粘贴cv2opencv背景
2条回答

在Python/OpenCV中有一种方法可以做到这一点

请注意,我反转了您的图像以恢复原始图像。如果在反转之前先从实际原稿开始,则跳过反转。

  • 读取输入并反转
  • 变灰
  • 制作面具的门槛
  • 创建输入大小的白色图像
  • 将两者混合在一起,用遮罩将鞋盖在白色上,以控制显示哪种颜色
  • 保存结果

输入:

enter image description here

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()


反向输入以恢复原始状态:

enter image description here

遮罩(阈值化后清洁边界):

enter image description here

结果:

enter image description here

如果要将一个图像放在另一个图像的前面,可以按如下操作:

back_img[y_start:y_end,x_start:x_end] = front_img[y_start:y_end,x_start:x_end]

如果要在y轴上浓缩图像,图像的大小必须相同。为此,您可以查看cv2.resize,也可以使用np.zeros创建一个空白图像,以向图像添加填充,以及我在第一种方法中说过的“如果您想将一个图像放在另一个图像之前”

相关问题 更多 >