摘要:不同尺寸的圖像,要達到最佳的像素化的顯示效果,所需要設置的單位像素塊的大小也是不同的,實踐出真知。我們需要圖像的指定一個處理范圍,并對該范圍內的每一個坐標像素點進行像素化的處理。公眾號專欄后臺回復馬賽克,獲取本文所涉及的完整代碼。
目錄
0 引言
1 環境
2 需求分析
3 代碼實現
4 代碼全景展示
5 后記
所謂的像素圖,就是對圖像做一個顆粒化的效果,使其產生一種妙不可言的朦朧感。費話不多說,先來看一張效果圖。
怎么樣,效果還不錯吧?現在,我們用Python來實現這種像素化的效果。
1 環境操作系統:Windows
Python版本:3.7.3
2 需求分析一個最簡單的實現思路,在打開圖片后,把圖片分割成一些像素塊,再對這些像素塊中的圖像信息進行處理(修改圖像中的RGB值)即可。
這里我們使用Numpy庫和PIL庫來實現這個需求,后者用來圖像的讀取與保存,涉及到的所有圖像處理動作均借助Numpy來實現。
有關NumPy模塊、PIL模塊的介紹,可參考如下。
NumPy(Numerical Python) 是 Python 語言的一個擴展程序庫,支持大量的維度數組與矩陣運算,此外也針對數組運算提供大量的數學函數庫。PIL(Python Imaging Library)是Python常用的圖像處理庫,而Pillow是PIL的一個友好Fork,提供了了廣泛的文件格式支持,強大的圖像處理能力,主要包括圖像儲存、圖像顯示、格式轉換以及基本的圖像處理操作等。
這兩個模塊非Python內置,都屬于第三方模塊,可直接采用如下方式進行安裝
pip install numpy pip install Pillow
注意,要想使用PIL模塊,是需要直接install Pillow模塊的。
3 代碼實現首先導入我們要用到的模塊
import numpy as np from PIL import Image
接下來,我們要處理圖片,首先得打開一張圖片,如下
data = Image.open("P:PersonalLuoShen.xpg")
然后把圖像轉換化Numpy數組進行下一步的處理
im1 = np.array(data)
這里處理的核心思想,也很簡單,主要通過中間值的RGB,對所選范圍塊的RGB進行重新賦值。
im1[y:y + pixel, x:x + pixel] = im1[y + (pixel // 2)][x + (pixel // 2)]
這里的x、y是分別指的我們圖像的橫向、縱向像素點的坐標值、而pixel指的是我們要以多大的像素塊,來處理這張圖像,我們設置的單位像素塊(Pixel數值)越小,生成的像素圖越精確。
當然了,若單位像素塊設置的太小,生成圖像就看不出效果了,至于多大的數值合適,需要自行嘗試。不同尺寸的圖像,要達到最佳的像素化的顯示效果,所需要設置的單位像素塊的大小也是不同的,實踐出真知。
我們需要圖像的指定一個處理范圍,并對該范圍內的每一個坐標(像素)點進行像素化的處理。
for y in range(Start_coordinate[1], End_coordinate[1], pixel): for x in range(Start_coordinate[0], End_coordinate[0], pixel): pass
在處理完成之后,我們再把Numpy數組轉換回圖像。
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: 處理的起始坐標(像素)點,元組形式 :param End_coordinate: 處理的終止坐標(像素)點,元組形式 :return: 通過中間值的RGB,對所選范圍塊的RGB進行重新賦值,設置的單位像素塊(Pixel數值)越小,生成的像素圖越精確 """ # 讀取圖片,并由 PIL image 轉換為 NumPy array im1 = np.array(Image.open("P:PersonalLuoShen.jpg")) # 遍歷所要處理范圍內的所有坐標(像素)點 for y in range(Start_coordinate[1], End_coordinate[1], pixel): for x in range(Start_coordinate[0], End_coordinate[0], pixel): # 通過中間值的RGB,對所選范圍塊的RGB進行重新賦值 im1[y:y + pixel, x:x + pixel] = im1[y + (pixel // 2)][x + (pixel // 2)] # 將NumPy array 轉換為 PIL image im2 = Image.fromarray(im1.astype(np.uint8)) # 展示處理后的圖像 im2.show() if __name__ == "__main__": # 設置好要處理的像素范圍,并以多大的像素塊來生成最終效果圖 to_pixelBlock(10, (0, 0), (1280, 800)5 后記
本文使用了PIL加上Numpy的配合,短短幾行代碼實現了圖像像素化的處理。當然這只是一種簡單地實現,要想實現更豐富的處理效果,還可以借助CV2來實現。
好了,以上就是本篇全部內容。
公眾號「Python專欄」后臺回復:「馬賽克」,獲取本文所涉及的完整代碼。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/44096.html
摘要:除此之外,無碼科技還推出抽獎助手和等流量和工具產品。目前無碼科技旗下用戶數過億,由醫療用戶和非醫療用戶構成。無碼科技產品負責人邱岳介紹。此外,在高性能的支持下,無碼科技在人工智能領域的技術得以不斷推進。無癥狀新冠疫情要如何判斷?家附近哪里有疫苗接種點接種疫苗有什么注意事項……新冠疫情爆發后,醫療小程序就診問問上,關于新冠疫情的搜索量出現明顯增長。就診問問是無碼科技旗下專注醫療健康搜索的小程序...
摘要:時間永遠都過得那么快,一晃從年注冊,到現在已經過去了年那些被我藏在收藏夾吃灰的文章,已經太多了,是時候把他們整理一下了。那是因為收藏夾太亂,橡皮擦給設置私密了,不收拾不好看呀。 ...
摘要:如果該文件已存在,文件的初始指針在文件的結尾。文件中只有一句話十步殺一人,千里不留行。關閉文件如果用來打開文件的話就不用管關閉文件的操作了,因為已經幫你完成了這一步,否則必須在處理文件之后加上關閉文件的操作 讀取文件的操作步驟 有一道腦筋急轉彎,問把大象裝進冰箱的步驟,答案很簡單,打開冰箱、把大象推進去、關閉冰箱。這就是一個處理問題的思路,我們對文件的操作和這個一樣,第一步:打開文件;...
摘要:業務開發中的調試方法總結這段時間,接觸了單元測試,同時業務中遇到了一些需要排錯調試的情況,就把自己的經驗做個小結。但是如果你的業務經常變化,但是變化的部分并不會影響單元測試,那這種情況下的單元測試性價比就很高。 業務開發中的調試方法總結 這段時間,接觸了單元測試,同時業務中遇到了一些需要排錯調試的情況,就把自己的經驗做個小結。 3種調試方法 狼叔說,常見的三種調試的境界 初級: 打l...
摘要:在軟件世界里,觀察意味著設置斷點添加調試語句監視程序值以及檢查內存在醫學領域,需要測試血樣和進行光透視。福爾摩斯,最后一案如果你不修復,它不會自動消失。修復解決問題的能力,是軟件工程師的核心競爭力之一。 這篇文章是《調試九法:軟硬件錯誤的排查之道》的閱讀筆記。這本書的主旨,是介紹如何修復bug:找出bug發生的原因、并給出修復方案。 調試bug的九個規則列舉如下,建議將這個清單打印出來...
閱讀 1721·2021-11-22 15:33
閱讀 2097·2021-10-08 10:04
閱讀 3549·2021-08-27 13:12
閱讀 3425·2019-08-30 13:06
閱讀 1474·2019-08-29 16:43
閱讀 1399·2019-08-29 16:40
閱讀 790·2019-08-29 16:15
閱讀 2749·2019-08-29 14:13