我正在尝试使用python在OpenCV中使用按位操作添加两个不同大小的图像。我希望Image1中的特定点(人脸的图像)与Image2中的特定点(眼镜架的图像)重合。特定的点不是图像的最远点。我知道框架眼镜的2个中点和眼睛的瞳孔。我希望框架中点与脸部眼睛的瞳孔点重合。我正在使用的代码将第二个图像的最左角点添加到Image1的特定点,如第10行,而我想要添加左玻璃框的中点。
面部图像可以是任何随机图像,并且眼镜图像是 -
我正在使用代码:
import cv2
import numpy as np
img_frame = cv2.imread('image1.jpg',1)
img_in = cv2.imread('face.jpg',1)
new_image = np.zeros(img_frame.shape,dtype=np.uint8)
i,j,k = img_frame.shape
for ii in range (1,i):
for jj in range (1,j):
pixel = img_frame[ii,jj]
img_in[339+ii,468+jj] = pixel
cv2.imwrite('pc2_with_frame_7.jpg',img_in)
cv2.imshow('win',img_in)
cv2.waitKey(0)
cv2.destroyWindow('win')
任何形式的帮助都将受到赞赏。
谢谢。
答案 0 :(得分:1)
好吧,似乎没有其他人可以提供帮助,所以我会尽我所能......
您要做的事情称为alpha合成。您可以在维基百科上阅读here以及OpenCV文档中的here。
我选择的工具是ImageMagick,它是免费的,具有Perl,Python,C / C ++绑定以及命令行工具。如果我从这张照片开始(face.jpg):
并带上你的glasses.jpg文件并将其转换为具有透明度的PNG,如下所示:
我可以在终端
运行以下ImageMagick命令composite glasses.png face.jpg out.jpg
我得到了这个:
似乎OpenCV可能存在透明度问题,并提出了解决方案here。如果您想在该帖子中尝试@ypnos建议的屏蔽方法,我已经为您提供了必要的输入文件,您可以从我的网站下载: