[英]How to blur a image in Python using Pillow
我正在嘗試使用 Pillow 在 Python 中拍攝圖像並將其模糊。
唯一導入的東西是隨機和圖像。
我可以使用的 Image 的唯一功能是打開、調整大小、加載、新建、關閉、顯示和保存。
我知道我必須取每個像素周圍像素的平均 RGB 值,然后將該值設置為中心像素的 RGB 值。
問題是我不知道如何獲取這些值並查看相鄰像素較少的特定邊緣情況。
我不能導入任何東西,只能使用列表、循環、if 語句、字典和元組。
看看這個: https://en.wikipedia.org/wiki/Kernel_%28image_processing%29
基本上,您需要遍歷圖像並計算每個像素的新值。 如果您可以更改圖像的大小,那么您可以簡單地忽略邊界,從而忽略邊緣情況。 否則,您將需要應用 wiki 頁面中列出的邊緣處理技術之一。
祝你好運!!
您可以使用numpy.lib.stride_tricks.as_strided
以沿兩個空間維度創建 window ,然后可用於通過 mean 對相鄰點進行mean
。 下面使用(3, 3)
window,即只考慮直接鄰居,但當然可以有不同的值。 要處理邊緣,首先通過重復邊緣值來填充原始圖像。 然后 window 平均過程可以重復任意次數,具體取決於所需的模糊因子。 這是一些示例代碼:
import matplotlib.pyplot as plt
import numpy as np
from PIL import Image
original_image = np.array(Image.open('example.jpg'))
image = np.pad(original_image, ((1,), (1,), (0,)), mode='edge')
window = np.lib.stride_tricks.as_strided(
image,
image.shape + (3, 3),
image.strides + image.strides[:2]
)[:-2, :-2]
for __ in range(10):
image[1:-1, 1:-1] = window.mean(axis=(-1, -2))
plt.title('Original')
plt.imshow(original_image)
plt.figure()
plt.title('Blurred')
plt.imshow(image[1:-1, 1:-1])
plt.show()
這是兩個圖像版本進行比較:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.