Python 实现图像合成微缩效果
目录
- 合成微缩效果
- 前言
- 图像微缩效果原理
- 实现图像微缩效果
合成微缩效果
前言
图像中的模糊效果可以强烈影响被拍摄场景的感知,模糊在传达所需的尺寸和距离感方面起着重要作用。合成微缩 (miniature faking
) 是一个使真实大小物体照片看起来像微缩模型照片的过程,也称为 Diorama Effect/Fillusion
,照片的模糊部分模拟了通常在特写摄影中通常遇到的近景深度,从而使场景看起来比实际场景小得多。
图像微缩效果原理
应用模糊近似于浅的景深可以合成微缩效果。当图像很大并从短距离观看时,效果更为明显。在本节中,我们将学习如何使用 PIL
库在图像中创建微缩效果。
实现图像微缩效果
(1) 首先,导入所有必需的库:
from PIL import Image, ImageEnhance, ImageFilter from scipy.ndimage import binary_erosion from PIL.ImageFilter import GaussianBlur import matplotlib.pyplot as plt, numpy as np
(2) 使用形态学腐蚀缩放后的掩码图像,然后通过使用给定半径迭代应用高斯模编程糊 GaussianBlur()
。每次重复应用掩码都会对高斯模糊进行扩大,以确保梯度模糊,并增加模糊程度:
def apply_gradient_blur(image, mask, n=10, radius=1): mask = mask.convert("1") for i in range(n): mask = binary_erosion(np.array(mask), structure=np.ones((10,10)), border_value=1) im_blur = image.filter(GaussianBlur(radius=radius)) image.paste(im_blur, masZVlXLmRDdkk=Image.fromarray(mask)) return image
(3) 接下来,根据函数 apply_gradient_blur()
定义函数 create_fake_miniature()
创建合成微缩效果,在函数中,使用 pil.imageenhance
模块的 Color()
和 Contrast()
函数增强图像的颜色和对比度,然后使用 apply_gradient_blur()
函数将梯度模糊应用于焦点外部的区域(即对应于掩码中的白色像素);最后,将增强的图像(焦点区域)与模糊图像(焦点外部区域)合并:
def create_fake_miniature(im, custom_mask, color=1.9, contrast=1.4, blur_radius=1.3): # 提高对比度和颜色 edited = ImageEnhance.Contr编程客栈ast(ImageEnhance.Color(im).enhance(color)).enhance(contrast) # 模糊图像并合并 im_blur = apply_gradient_blur(edited.cZVlXLmRDdkopy(), mask.copy(), n=50, radius=blur_radius) edited = edited.convert("RGBA") edited.paste(im_blur, mask=mask) return edited
(4) 使用 pil image.open()
函数读取输入图像和掩码图像(焦点区域)作为输入创建合成微缩效果。绘制输入图像:
im = Image.open("9.png") mask = Image.open("9_binary.png") out = create_fake_miniature(im, mask) plt.figure(figsize=(20,10)) plt.imshow(im), plt.axis('off'), plt.title('Original image', size=10) plt.show()
(5) 绘制二值掩码图像:开发者_JAVA开发
plt.figure(figsize=(10,10)) plt.imshow(mask), plt.axis('off'), plt.title('(Bell Whistles) Mask image', size=10) plt.show()
(6) 最后,绘制合成微缩效果输出图像如下:
plt.figure(figsize=(20,10)) plt.imshow(out), plt.axis('off'), plt.title('Fake Miniature image', size=10) plt.show()
从上图中可以看出,焦点中的建筑物似乎距离镜头更近了。
到此这篇关于python 实现图像合成微缩效果的文章就介绍到这了,更多相关Python 合成微缩效果内python容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!
精彩评论