使用python在OpenCV中使用已知的特定添加点添加两个图像

时间:2014-05-19 05:20:01

标签: python image opencv addition

我正在尝试使用python在OpenCV中使用按位操作添加两个不同大小的图像。我希望Image1中的特定点(人脸的图像)与Image2中的特定点(眼镜架的图像)重合。特定的点不是图像的最远点。我知道框架眼镜的2个中点和眼睛的瞳孔。我希望框架中点与脸部眼睛的瞳孔点重合。我正在使用的代码将第二个图像的最左角点添加到Image1的特定点,如第10行,而我想要添加左玻璃框的中点。

面部图像可以是任何随机图像,并且眼镜图像是 -

Image 2

我正在使用代码:

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

任何形式的帮助都将受到赞赏。

谢谢。

1 个答案:

答案 0 :(得分:1)

好吧,似乎没有其他人可以提供帮助,所以我会尽我所能......

您要做的事情称为alpha合成。您可以在维基百科上阅读here以及OpenCV文档中的here

我选择的工具是ImageMagick,它是免费的,具有Perl,Python,C / C ++绑定以及命令行工具。如果我从这张照片开始(face.jpg):

enter image description here

并带上你的glasses.jpg文件并将其转换为具有透明度的PNG,如下所示:

enter image description here

我可以在终端

运行以下ImageMagick命令
composite glasses.png face.jpg out.jpg

我得到了这个:

enter image description here

似乎OpenCV可能存在透明度问题,并提出了解决方案here。如果您想在该帖子中尝试@ypnos建议的屏蔽方法,我已经为您提供了必要的输入文件,您可以从我的网站下载:

glasses.png with alpha channel

input-mask.png