如何使用PIL或OpenCV在Python中比较坐标值并将图像粘贴到另一张图像上?

3

我需要根据坐标值合并两个图像。

我已经使用单点到点合并方法进行了合并,使用PIL或OpenCV在Python中以修改的不透明度粘贴图像到另一个给定坐标的图像

我得到了那个结果。 但是我需要在相同的两个图像中进行多个坐标比较和合并。 有可能实现这一点吗?

Input1

Input 2

Result

上面的图像是结果。输出仅具有单点到点合并。但我需要多点合并。
参数为{"Headpts": [354,64, "ShoulderSpinepts": [25,234], "LeftShoulderpts": [123,243], "LeftElbowpts": [54,234], "LeftHandpts": [0, 0], "RightShoulderpts": [0, 0], "RightElbowpts": [0, 0], "RightHandpts": [0, 0], "MidSpinepts": [0, 0], "BaseSpinepts": [0, 0], "LeftHippts": [0, 0], "LeftKneepts": [0, 0], "LeftFootpts": [0, 0], "RightHippts": [0, 0], "RightKneepts": [0, 0], "RightFootpts": [0, 0], "LeftWristpts": [0, 0], "RightWristpts": [0, 0], "Neckpts": [0, 0]}。

你想根据这些点将T恤的形状调整到人的身上吗? - CodingPeter
是的,@CodingPeter,我的猜测是如果左肩点和右肩点两个输入合并,图像将会根据它们缩小。还有其他方法吗? - user15373408
1
我正在尝试使用cv2.getPerspectiveTransform。不确定它是否有效。 - CodingPeter
@CodingPeter,你建议使用cv2.getPerspectiveTransform。我用实时视频检查了一下,但是没有得到我想要的结果。如果你有任何示例,能否请上传? - user15373408
1
等一下,我正在写答案~ - CodingPeter
显示剩余2条评论
1个回答

2
我正在使用 cv2.getAffineTransform()。由于它只能添加三个点(cv2.getPerspectiveTransform() 上只有四个),所以我将图像切割成多个三角形。

这是我的样例:

enter image description here 点的位置:enter image description here

我的目标是将猫头重新塑造为一个300*300的盒子。

首先,根据这些点裁剪区域成三角形

enter image description here

然后使用cv2.getAffineTransform()获取已调整的特定区域。enter image description here enter image description here enter image description here 然后使用cv2.bitwise_or()将它们加在一起。生成的图像为:enter image description here 你的项目更复杂,但是理论相同。你需要将图像裁剪成几个三角形。然后转换它们以适应模型。在合并这些三角形之后,你可以得到你的图像。

3
你是如何调整那个被削减的三角形部分的?你提到了“获取已经调整过的特定区域”。 - user15373408
cv2.getAffineTransform()示例代码: https://opencv-python-tutroals.readthedocs.io/en/latest/py_tutorials/py_imgproc/py_geometric_transformations/py_geometric_transformations.html - CodingPeter
对于静态图像,您的方法是有效的。但是当我将其应用于实时视频时,帧会缩小。还有其他建议吗?谢谢@CodingPeter - user15373408
你知道你的程序大部分时间花费在哪里吗?然后对它进行优化。 - CodingPeter

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接