【问题标题】:Addition of two images using knowing specific points of addition in OpenCV using python使用python在OpenCV中使用已知的特定添加点添加两个图像
【发布时间】:2014-05-20 03:08:04
【问题描述】:

我正在尝试使用 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')

我们将不胜感激。

谢谢。

【问题讨论】:

  • 您需要计算瞳孔之间的 x 距离和眼镜中心之间的 x 距离,并按该比例缩放眼镜以适应面部宽度。
  • 你还需要计算眼睛是否水平,即两只眼睛的y坐标是否相同,否则你需要计算眼睛之间的y坐标并将其除以 x 差,取 tan 倒数并使用该角度旋转眼镜。
  • 是的,缩放部分已经完成了,这是下一个问题,就是把它放在正确的地方
  • 您是否会将眼镜图片更改为 PNG,它将支持透明度(而 JPEG 不支持)并允许眼睛透过?
  • 是的,我想显示眼睛,或者它只能是不透明的部分或只是规格的框架。

标签: python image opencv addition


【解决方案1】:

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

您正在尝试做的事情称为 alpha 合成。您可以在 Wikipedia 上阅读 here 以及在 OpenCV 文档中阅读 here

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

获取您的 glass.jpg 文件并将其转换为具有透明度的 PNG,如下所示:

我可以在终端运行以下 ImageMagick 命令

composite glasses.png face.jpg out.jpg

我明白了:

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

glasses.png with alpha channel

input-mask.png

【讨论】:

  • 我能够将文件转换为 .png,但无法使用 -convert input.png -channel Alpha -negate -separate input-mask.png 提取 alpha 通道
  • 您的 glass.png 看起来如何?你编辑了图像吗?你是怎么做到的?我无法从背景中删除白色像素
  • 我将您的 glass.jpg 加载到 Photoshop 中并使用 Select->Color Range 选择黑框,然后我反转选择,因此我选择了“白色/透明”区域,然后我删除了选择所以它看起来像一个棋盘并保存为 PNG,因为该格式支持透明度。
  • 您不需要提取 Alpha 通道,实际上您无法从 JPEG 文件中提取 Alpha 通道,因为 JPEG 不能包含透明度。
猜你喜欢
  • 1970-01-01
  • 2014-06-07
  • 1970-01-01
  • 2021-04-05
  • 1970-01-01
  • 2017-04-23
  • 2016-02-13
  • 1970-01-01
  • 2018-10-11
相关资源
最近更新 更多