繁体   English   中英

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

[英]Is it possible to paste an image on top of another in OpenCV?

我对 OpenCv 相当陌生,正在创建一个程序,该程序将使用 GrabCut 算法将鞋子从背景中分割出来,然后我想将鞋子粘贴到白色背景上,但我在这部分很挣扎。

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

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

预先感谢您的建议! :)

原图:原鞋

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

这是在 Python/OpenCV 中执行此操作的一种方法。

请注意,我反转您的图像以取回您的原始图像。 如果在反转之前从实际原件开始,请跳过反转。

  • 读取输入并反转
  • 转换为灰色
  • 制作口罩的门槛
  • 创建一个输入大小的白色图像
  • 使用蒙版将两者与白色的鞋子混合在一起,以控​​制哪个显示
  • 保存结果

输入:

在此处输入图片说明

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


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

在此处输入图片说明

掩码(在阈值清理边界后):

在此处输入图片说明

结果:

在此处输入图片说明

如果你想把一张图片放在另一张图片的前面,你可以这样做:

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创建一个空白图像以向图像添加填充以及我在第一种方法中所说的“如果您想将一个图像放在另一个图像前面” .

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM