Python用61行代碼實(shí)現(xiàn)圖片像素化的示例代碼
起因
看到網(wǎng)上的像素圖片,感覺蠻有趣的,就打算用python一些PIL類庫寫一個(gè)。

實(shí)現(xiàn)思路
把一張圖片分成多個(gè)塊,每個(gè)塊的顏色都等于這個(gè)色塊中顏色最多的顏色,如下圖。

這個(gè)圖取2×2的像素為塊的大小,把快中顏色與每個(gè)顏色出現(xiàn)的數(shù)量存放到字典里,取最大的顏色,填充整個(gè)塊。
具體實(shí)現(xiàn)
from PIL import Image
def init():
# 設(shè)置每個(gè)像素區(qū)塊的大小
block_size = 75
img = Image.open("a.jpg")
# 獲取圖片的寬高
width, height = img.size
# 獲取像素點(diǎn)對應(yīng)RGB顏色值,可以改變img_array中的值來改變顏色值
img_array = img.load()
# 為了處理最后的區(qū)塊,加了一次循環(huán)
max_width = width + block_size
max_height = height + block_size
for x in range(block_size - 1, max_width, block_size):
for y in range(block_size - 1, max_height, block_size):
# 如果是最后一次循環(huán),則x坐標(biāo)等于width - 1
if x == max_width - max_width % block_size - 1:
x = width - 1
# 如果是最后一次循環(huán),則x坐標(biāo)等于height - 1
if y == max_height - max_height % block_size - 1:
y = height - 1
# 改變每個(gè)區(qū)塊的顏色值
change_block(x, y, block_size, img_array)
y += block_size
x += block_size
img.save(r'D:\python\pixel_image\awesome_copy.png')
img.show()
"""
:param x坐標(biāo) x:
:param y坐標(biāo) y:
:param 區(qū)塊大小 black_size:
:param 可操作圖片數(shù)組 img_array:
"""
def change_block(x, y, black_size, img_array):
color_dist = {}
block_pos_list = []
for pos_x in range(-black_size + 1, 1):
for pos_y in range(-black_size + 1, 1):
# todo print(x + pos_x,y + pos_y)
block_pos_list.append([x + pos_x, y + pos_y])
for pixel in block_pos_list:
if not str(img_array[pixel[0], pixel[1]]) in color_dist.keys():
color_dist[str(img_array[pixel[0], pixel[1]])] = 1
else:
color_dist[str(img_array[pixel[0], pixel[1]])] += 1
# key-->value => value-->key
new_dict = {v: k for k, v in color_dist.items()}
max_color = new_dict[max(color_dist.values())]
# 將區(qū)塊內(nèi)所有的顏色值設(shè)置為顏色最多的顏色
for a in block_pos_list:
img_array[a[0], a[1]] = tuple(list(map(int, max_color[1:len(max_color) - 1].split(","))))
def get_key(dict, value):
return [k for k, v in dict.items() if v == value]
if __name__ == "__main__":
init()
效果對比


總結(jié)
開源地址https://github.com/MasakiOvO/pixel_image
還有很多改進(jìn)的地方,比如取色值的算法上,應(yīng)該有更好的解決方法,應(yīng)該用多進(jìn)程來實(shí)現(xiàn),這樣程序速度會快很多。OvO
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Python3實(shí)現(xiàn)取圖片中特定的像素替換指定的顏色示例
- Python+OpenCV圖片局部區(qū)域像素值處理改進(jìn)版詳解
- Python+OpenCV圖片局部區(qū)域像素值處理詳解
- python使用PIL模塊獲取圖片像素點(diǎn)的方法
- Python 處理圖片像素點(diǎn)的實(shí)例
- Python OpenCV處理圖像之圖像像素點(diǎn)操作
- 用python處理圖片實(shí)現(xiàn)圖像中的像素訪問
- python微信跳一跳系列之棋子定位像素遍歷
- python3.6+opencv3.4實(shí)現(xiàn)鼠標(biāo)交互查看圖片像素
- python實(shí)現(xiàn)兩張圖片的像素融合
相關(guān)文章
Python編程pytorch深度卷積神經(jīng)網(wǎng)絡(luò)AlexNet詳解
AlexNet和LeNet的架構(gòu)非常相似。這里我們提供了一個(gè)稍微精簡版本的AlexNet,去除了當(dāng)年需要兩個(gè)小型GPU同時(shí)運(yùn)算的設(shè)計(jì)特點(diǎn)2021-10-10
Python爬蟲實(shí)戰(zhàn)之使用Scrapy爬取豆瓣圖片
在用Python的urllib和BeautifulSoup寫過了很多爬蟲之后,本人決定嘗試著名的Python爬蟲框架——Scrapy.本次分享將詳細(xì)講述如何利用Scrapy來下載豆瓣名人圖片,需要的朋友可以參考下2021-06-06
Python?OpenCV識別行人入口進(jìn)出人數(shù)統(tǒng)計(jì)
本文主要介紹了Python?OpenCV識別行人入口進(jìn)出人數(shù)統(tǒng)計(jì),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧<BR>2023-01-01
TensorFlow神經(jīng)網(wǎng)絡(luò)創(chuàng)建多層感知機(jī)MNIST數(shù)據(jù)集
這篇文章主要為大家介紹了TensorFlow神經(jīng)網(wǎng)絡(luò)如何創(chuàng)建多層感知機(jī)MNIST數(shù)據(jù)集的實(shí)現(xiàn)過程示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助2021-11-11
Ubuntu22.04安裝PyTorch1.12.1 GPU版本全過程
這篇文章主要介紹了Ubuntu22.04安裝PyTorch1.12.1 GPU版本全過程,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-06-06
Python調(diào)用http-post接口的實(shí)現(xiàn)方式
這篇文章主要介紹了Python調(diào)用http-post接口的實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-08-08
Python3 + Appium + 安卓模擬器實(shí)現(xiàn)APP自動化測試并生成測試報(bào)告
這篇文章主要介紹了Python3 + Appium + 安卓模擬器實(shí)現(xiàn)APP自動化測試并生成測試報(bào)告,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-01-01

