這期內(nèi)容當(dāng)中小編將會給大家?guī)碛嘘P(guān)如何用Python幫你打碼,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
10年積累的成都網(wǎng)站設(shè)計(jì)、成都做網(wǎng)站、外貿(mào)網(wǎng)站建設(shè)經(jīng)驗(yàn),可以快速應(yīng)對客戶對網(wǎng)站的新想法和需求。提供各種問題對應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識你,你也不認(rèn)識我。但先做網(wǎng)站后付款的網(wǎng)站建設(shè)流程,更有新余免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。
引言
所謂的像素圖,就是對圖像做一個顆?;男Ч?,使其產(chǎn)生一種妙不可言的朦朧感。費(fèi)話不多說,先來看一張效果圖。
怎么樣,效果還不錯吧?現(xiàn)在,我們用Python來實(shí)現(xiàn)這種像素化的效果。
1 環(huán)境
操作系統(tǒng):Windows
Python版本:3.7.3
2 需求分析
一個最簡單的實(shí)現(xiàn)思路,在打開圖片后,把圖片分割成一些像素塊,再對這些像素塊中的圖像信息進(jìn)行處理(修改圖像中的RGB值)即可。
這里我們使用Numpy庫和PIL庫來實(shí)現(xiàn)這個需求,后者用來圖像的讀取與保存,涉及到的所有圖像處理動作均借助Numpy來實(shí)現(xiàn)。
有關(guān)NumPy模塊、PIL模塊的介紹,可參考如下。
NumPy(Numerical Python) 是 Python 語言的一個擴(kuò)展程序庫,支持大量的維度數(shù)組與矩陣運(yùn)算,此外也針對數(shù)組運(yùn)算提供大量的數(shù)學(xué)函數(shù)庫。
PIL(Python Imaging Library)是Python常用的圖像處理庫,而Pillow是PIL的一個友好Fork,提供了了廣泛的文件格式支持,強(qiáng)大的圖像處理能力,主要包括圖像儲存、圖像顯示、格式轉(zhuǎn)換以及基本的圖像處理操作等。
這兩個模塊非Python內(nèi)置,都屬于第三方模塊,可直接采用如下方式進(jìn)行安裝。
pip install numpy pip install Pillow
注意,要想使用PIL模塊,是需要直接install Pillow模塊的。
3 代碼實(shí)現(xiàn)
首先導(dǎo)入我們要用到的模塊
import numpy as np from PIL import Image
接下來,我們要處理圖片,首先得打開一張圖片,如下
data = Image.open("P:\Personal\LuoShen.xpg")
然后把圖像轉(zhuǎn)換化Numpy數(shù)組進(jìn)行下一步的處理
im1 = np.array(data)
這里處理的核心思想,也很簡單,主要通過中間值的RGB,對所選范圍塊的RGB進(jìn)行重新賦值。
im1[y:y + pixel, x:x + pixel] = im1[y + (pixel // 2)][x + (pixel // 2)]
這里的x、y是分別指的我們圖像的橫向、縱向像素點(diǎn)的坐標(biāo)值、而pixel指的是我們要以多大的像素塊,來處理這張圖像,我們設(shè)置的單位像素塊(Pixel數(shù)值)越小,生成的像素圖越精確。
當(dāng)然了,若單位像素塊設(shè)置的太小,生成圖像就看不出效果了,至于多大的數(shù)值合適,需要自行嘗試。不同尺寸的圖像,要達(dá)到最佳的像素化的顯示效果,所需要設(shè)置的單位像素塊的大小也是不同的,實(shí)踐出真知。
我們需要圖像的指定一個處理范圍,并對該范圍內(nèi)的每一個坐標(biāo)(像素)點(diǎn)進(jìn)行像素化的處理。
for y in range(Start_coordinate[1], End_coordinate[1], pixel): for x in range(Start_coordinate[0], End_coordinate[0], pixel): pass
在處理完成之后,我們再把Numpy數(shù)組轉(zhuǎn)換回圖像。
im2 = Image.fromarray(im1.astype(np.uint8))
最后展示出處理后的圖像
im2.show()
4 代碼全景展示
import numpy as np
from PIL import Image
def to_pixelBlock(pixel, Start_coordinate, End_coordinate):
'''
:param pixel: 單位像素塊的元素大小
:param Start_coordinate: 處理的起始坐標(biāo)(像素)點(diǎn),元組形式
:param End_coordinate: 處理的終止坐標(biāo)(像素)點(diǎn),元組形式
:return:
通過中間值的RGB,對所選范圍塊的RGB進(jìn)行重新賦值,設(shè)置的單位像素塊(Pixel數(shù)值)越小,生成的像素圖越精確
'''
# 讀取圖片,并由 PIL image 轉(zhuǎn)換為 NumPy array
im1 = np.array(Image.open("P:\Personal\LuoShen.jpg"))
# 遍歷所要處理范圍內(nèi)的所有坐標(biāo)(像素)點(diǎn)
for y in range(Start_coordinate[1], End_coordinate[1], pixel):
for x in range(Start_coordinate[0], End_coordinate[0], pixel):
# 通過中間值的RGB,對所選范圍塊的RGB進(jìn)行重新賦值
im1[y:y + pixel, x:x + pixel] = im1[y + (pixel // 2)][x + (pixel // 2)]
# 將NumPy array 轉(zhuǎn)換為 PIL image
im2 = Image.fromarray(im1.astype(np.uint8))
# 展示處理后的圖像
im2.show()
if __name__ == '__main__':
# 設(shè)置好要處理的像素范圍,并以多大的像素塊來生成最終效果圖
to_pixelBlock(10, (0, 0), (1280, 800)
使用了PIL加上Numpy的配合,短短幾行代碼實(shí)現(xiàn)了圖像像素化的處理。當(dāng)然這只是一種簡單地實(shí)現(xiàn),要想實(shí)現(xiàn)更豐富的處理效果,還可以借助CV2來實(shí)現(xiàn)。
上述就是小編為大家分享的如何用Python幫你打碼了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。