Python?實(shí)現(xiàn)圖像合成微縮效果
合成微縮效果
前言
圖像中的模糊效果可以強(qiáng)烈影響被拍攝場(chǎng)景的感知,模糊在傳達(dá)所需的尺寸和距離感方面起著重要作用。合成微縮 (miniature faking
) 是一個(gè)使真實(shí)大小物體照片看起來像微縮模型照片的過程,也稱為 Diorama Effect/Fillusion
,照片的模糊部分模擬了通常在特寫攝影中通常遇到的近景深度,從而使場(chǎng)景看起來比實(shí)際場(chǎng)景小得多。
圖像微縮效果原理
應(yīng)用模糊近似于淺的景深可以合成微縮效果。當(dāng)圖像很大并從短距離觀看時(shí),效果更為明顯。在本節(jié)中,我們將學(xué)習(xí)如何使用 PIL
庫在圖像中創(chuàng)建微縮效果。
使用掩碼可以選擇應(yīng)重點(diǎn)關(guān)注的焦點(diǎn)對(duì)象,本節(jié)中我們使用的二值掩碼具有在對(duì)象交點(diǎn)處為黑色像素,而其他位置為白色像素。將高斯模糊應(yīng)用到圖像上,然后使用掩碼從原始圖像或模糊圖像中選擇合適的像素。
為了模擬場(chǎng)景效應(yīng)的深度,需要在圖像中多次應(yīng)用高斯模糊,然后使用形態(tài)學(xué)運(yùn)算腐蝕縮放的掩碼來重復(fù)高斯模糊過程,這將在模糊后的掩碼中產(chǎn)生線性梯度。同時(shí),還需要增強(qiáng)圖像的顏色和亮度。
實(shí)現(xiàn)圖像微縮效果
(1) 首先,導(dǎo)入所有必需的庫:
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) 使用形態(tài)學(xué)腐蝕縮放后的掩碼圖像,然后通過使用給定半徑迭代應(yīng)用高斯模糊 GaussianBlur()
。每次重復(fù)應(yīng)用掩碼都會(huì)對(duì)高斯模糊進(jìn)行擴(kuò)大,以確保梯度模糊,并增加模糊程度:
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, mask=Image.fromarray(mask)) return image
(3) 接下來,根據(jù)函數(shù) apply_gradient_blur()
定義函數(shù) create_fake_miniature()
創(chuàng)建合成微縮效果,在函數(shù)中,使用 pil.imageenhance
模塊的 Color()
和 Contrast()
函數(shù)增強(qiáng)圖像的顏色和對(duì)比度,然后使用 apply_gradient_blur()
函數(shù)將梯度模糊應(yīng)用于焦點(diǎn)外部的區(qū)域(即對(duì)應(yīng)于掩碼中的白色像素);最后,將增強(qiáng)的圖像(焦點(diǎn)區(qū)域)與模糊圖像(焦點(diǎn)外部區(qū)域)合并:
def create_fake_miniature(im, custom_mask, color=1.9, contrast=1.4, blur_radius=1.3): # 提高對(duì)比度和顏色 edited = ImageEnhance.Contrast(ImageEnhance.Color(im).enhance(color)).enhance(contrast) # 模糊圖像并合并 im_blur = apply_gradient_blur(edited.copy(), mask.copy(), n=50, radius=blur_radius) edited = edited.convert("RGBA") edited.paste(im_blur, mask=mask) return edited
(4) 使用 pil image.open()
函數(shù)讀取輸入圖像和掩碼圖像(焦點(diǎn)區(qū)域)作為輸入創(chuàng)建合成微縮效果。繪制輸入圖像:
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) 繪制二值掩碼圖像:
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()
從上圖中可以看出,焦點(diǎn)中的建筑物似乎距離鏡頭更近了。
到此這篇關(guān)于Python 實(shí)現(xiàn)圖像合成微縮效果的文章就介紹到這了,更多相關(guān)Python 合成微縮效果內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python2.7實(shí)現(xiàn)爬蟲網(wǎng)頁數(shù)據(jù)
這篇文章主要為大家詳細(xì)介紹了python2.7實(shí)現(xiàn)爬蟲網(wǎng)頁數(shù)據(jù),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-05-05Pandas中`ValueError: cannot reindex from
在Pandas中,ValueError: cannot reindex from a duplicate axis錯(cuò)誤通常發(fā)生在嘗試對(duì)包含重復(fù)索引的DataFrame或Series進(jìn)行重新索引(reindex)時(shí),所以本文介紹了Pandas中`ValueError: cannot reindex from a duplicate axis`錯(cuò)誤分析及解決辦法,需要的朋友可以參考下2024-07-07Mac 安裝 Python3.10 和 配置環(huán)境的詳細(xì)教程
這篇文章主要介紹了Mac 安裝 Python3.10 和 配置環(huán)境,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-05-05python十進(jìn)制和二進(jìn)制的轉(zhuǎn)換方法(含浮點(diǎn)數(shù))
這篇文章主要介紹了python十進(jìn)制和二進(jìn)制的轉(zhuǎn)換方法(含浮點(diǎn)數(shù)),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-07-07python實(shí)現(xiàn)b站直播自動(dòng)發(fā)送彈幕功能
這篇文章主要介紹了python如何實(shí)現(xiàn)b站直播自動(dòng)發(fā)送彈幕,幫助大家更好的理解和學(xué)習(xí)使用python,感興趣的朋友可以了解下2021-02-02python字典如何獲取最大和最小value對(duì)應(yīng)的key
這篇文章主要介紹了python字典如何獲取最大和最小value對(duì)應(yīng)的key問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-11-11Python中import導(dǎo)入上一級(jí)目錄模塊及循環(huán)import問題的解決
Python中的import語句導(dǎo)入模塊相信大家再熟悉不過了,這里我們會(huì)來講解Python中import導(dǎo)入上一級(jí)目錄模塊及循環(huán)import問題的解決,需要的朋友可以參考下2016-06-06