[英]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.