什么是合成?python如何合成两张照片?
python照片合成是一种将单独的元素压缩成一个图像的技术。我们可以说通过组合多张图像或在单个图像中编辑,在一张图像中创建更多细节。你绝对每天都会看到合成图像——在广告、网站、新闻中,甚至在你朋友的社交媒体上。有时在合成中,我们将不同的图像组合成一张甚至不在一处拍摄的图像;这就像用大海或不同图像中存在的其他东西改变天空一样。许多使用图像合成案例;每当需要移除、组合或提取图像中存在的任何对象时,我们都会使用图像合成。
如何将两张图片混合?所有的合成过程基本上都是用图像的其他材料代替选定的部分,而不是几乎来自图像;有时我们也需要从其他图像中添加或删除组件,所以这是基本的图像合成,让我们通过使用 python 更熟悉图像合成中的 alpha 混合和颜色马赛克等技术。
什么是Alpha混合?python如何将照片合成?
Alpha 混合是通过将一个图像与背景组合来创建部分或完全透明的图像的过程。我们经常使用它来渲染不同层中的像素(图片元素),然后将 2D 图像组合成单个或最终图像,称为合成图像。Alpha 混合还用于在2D 计算机图形中将光栅化的前景元素放在背景上。
为了正确组合像素,有必要为每个元素处理相关的遮罩;除了颜色之外,这些哑光层还包含以下信息:
- 正在绘制的几何形状。
- 图像部分之间的差异
python照片合成:有多种混合模式。组合两个图像的基本操作是将一个图像放在另一个图像上。
alpha 混合背后的数学很简单,在任何图像的图片元素(像素)处,我们需要使用 alpha 蒙版组合前景元素颜色 (f) 和背景颜色 (b)。
注意:公式中使用的值是 alpha 蒙版中的像素值除以 255。因此,在下面的公式中,
- 当 时,输出像素颜色为背景。
- 当 时,输出像素颜色只是前景。
- 当输出像素颜色是背景和前景的混合时。对于逼真的混合,alpha 蒙版边界通常具有介于 0 和 1 之间的像素。
python如何合成两张照片:使用 Python 进行 Alpha 混合
在本节中,我们将学习如何将前景图像叠加到背景图像上
有几个步骤可以做到这一点。
在 Colab 中设置环境
要求:Python 3.6 以上,OpenCV-python 4.5 以上
- 导入所需的库 (OpenCV)
import cv2
from google.colab.patches import cv2_imshow
- 读取图像进行混合
img1 = cv2.imread('/aim.png')
img2 = cv2.imread('/mask.png')
- 查看我们已阅读的图像
cv2_imshow(img1)
cv2.waitKey(0)
cv2_imshow(img2)
cv2.waitKey(0)
输出
- 做一个while循环。
python如何将照片合成?通过使用循环,我们可以在许多 alpha 值之间迭代以获得满意的结果。
while (choice) :
alpha = float(input("Enter alpha value"))
dst = cv2.addWeighted(img1, alpha , img2, 1-alpha, 0)
cv2.imwrite('alpha_mask_.png', dst)
img3 = cv2.imread('alpha_mask_.png')
cv2_imshow(img3)
cv2.waitKey(0)
choice = int(input("Enter 1 to continue and 0 to exit"))
输出:
- 选择并输入 0 到 1 之间的 alpha 值。
如何将两张图片混合?通过使用所有这些步骤,我们可以制作带有 AIM 徽标的蒙版,因此这只是一项任务,我需要借助混合技术制作带有该徽标的蒙版,我从 mask.png 和AIM.png 的 logo 和颜色并合成在图像中。
+
你可以参考这里的代码。
什么是彩色马赛克?
马赛克是由彩色石头制成的图案或图像,通常尺寸较小。我们可以从一些用彩色石头、大理石和玻璃碎片制作的老照片中举出一些例子;现在许多社交媒体平台都在使用图像过滤器,我们可以看到其中许多与马赛克有关。除此之外,彩色马赛克还有很多用途。用技术术语来说,我们可以说大部分时间;目标图像称为马赛克照片;当它由大量的小矩形网格图像组成时,网格图像已经是任何物体的图像。通过组合这些网格,我们获得了一个看起来像不同对象图像的目标图像。网格不需要是不同对象的图像。
python如何将照片合成?两种照片马赛克,取决于网格的匹配方式。
- 更简单的种类——在目标图像中,我们对单一颜色的网格图像进行平均,并减少单一颜色的每一部分;这些部分可以被认为是一个图像库。然后目标图像的每个网格都被库替换,其中这些颜色尽可能相似。它的分辨率对目标图像进行下采样,然后每个生成的像素都被替换为平均颜色与该像素匹配的图像。
- 在更高级的照片马赛克中,我们不会对目标图像进行下采样或降低其分辨率。为了匹配,我们将矩形网格中的每个图片元素与每个库图像中的相应图片元素进行比较。然后我们用库图像替换目标图像中的矩形,这样可以最小化像素之间的总差异,从而产生更好的结果。这种先进的摄影马赛克比简单的需要高得多的计算量。尽管如此,它的优点是结果可以好得多,因为逐像素比较和匹配可以通过下采样或对其图片元素的影响来保护目标图像。
python照片合成:所以到目前为止,我们已经对它是如何发生或工作的进行了理论讨论。在下一节中,我们将尝试使用 python 和一些库来制作图像照片马赛克。
将图像分解为像素并增加其大小是马赛克的基础。
如何将两张图片混合?简单地说,我试图用一个女孩的形象来做到这一点。
在这里,我们将使用以下库:
- 图像
- Matplotlib
- 马赛克
- OpenCV
在 Colab 中设置环境
要求:Python 3.6以上,skimage 0.17.2以上,matplotlib,photomosaic 0.3.1,opencv-python 4.5以上也
- 安装照片马赛克
!pip install photomosaic
- 导入库
from skimage.io import *
import sys
import photomosaic
from skimage import data
import matplotlib.pyplot as plt
import cv2
- 读取图像并将其转换为原始颜色。
image = cv2.imread('/content/drive/MyDrive/Yugesh/lena.jpg')
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
plt.imshow(image)
输出
- 创建所有图像方块并生成一个池。
photomosaic.rainbow_of_squares('square/')
square_pool = photomosaic.make_pool('square/*.png')
5832it [00:04, 1440.60it/s]
analyzing pool: 100%|██████████| 5832/5832 [00:11<00:00, 509.66it/s]
- python如何合成两张照片:创建马赛克图像。为马赛克提供图像、方形池和网格大小
mosaic = photomosaic.basic_mosaic(image, square_pool,(200, 300))
输出
partitioning: depth 0: 100%|██████████| 60000/60000 [00:00<00:00, 276188.17it/s]
analyzing tiles: 100%|██████████| 60000/60000 [00:01<00:00, 47331.04it/s]
matching: 100%|██████████| 60000/60000 [00:02<00:00, 21374.57it/s]
drawing mosaic: 100%|██████████| 60000/60000 [00:05<00:00, 11733.51it/s]
- 图像视图
plt.imshow(mosaic)
输出
- 让我们用不同的网格大小来检查它。
这次我们提供了(100,150),输出为
而对于 (30,20)
python照片合成:这意味着当我们增加网格大小时,我们将无法清楚地看到图像,因为在此过程中,我们试图将相似颜色的矩形替换到可用的最佳匹配库中。在这里,我们尝试制作相似颜色的网格,以彻底了解基础知识。你离图像越远,你将能够看到清晰的图像,因为每个网格中的颜色分布以及整个图像中相似颜色网格的分布。
我们可以在此处查看执行此操作的代码。
参考:
- 用于 alpha 混合代码的Colab Notebook
- 彩色马赛克代码的Colab Notebook
- 光马赛克的实现
- Opencv-alpha 混合