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