用python處理圖片實(shí)現(xiàn)圖像中的像素訪問
前面的一些例子中,我們都是利用Image.open()來打開一幅圖像,然后直接對(duì)這個(gè)PIL對(duì)象進(jìn)行操作。如果只是簡單的操作還可以,但是如果操作稍微復(fù)雜一些,就比較吃力了。因此,通常我們加載完圖片后,都是把圖片轉(zhuǎn)換成矩陣來進(jìn)行更加復(fù)雜的操作。
python中利用numpy庫和scipy庫來進(jìn)行各種數(shù)據(jù)操作和科學(xué)計(jì)算。我們可以通過pip來直接安裝這兩個(gè)庫
pip install numpy pip install scipy
以后,只要是在python中進(jìn)行數(shù)字圖像處理,我們都需要導(dǎo)入這些包:
from PIL import Image import numpy as np import matplotlib.pyplot as plt
打開圖像并轉(zhuǎn)化為矩陣,并顯示:
from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
img=np.array(Image.open('d:/lena.jpg')) #打開圖像并轉(zhuǎn)化為數(shù)字矩陣
plt.figure("dog")
plt.imshow(img)
plt.axis('off')
plt.show()
調(diào)用numpy中的array()函數(shù)就可以將PIL對(duì)象轉(zhuǎn)換為數(shù)組對(duì)象。
查看圖片信息,可用如下的方法:
print img.shape print img.dtype print img.size print type(img)
如果是RGB圖片,那么轉(zhuǎn)換為array之后,就變成了一個(gè)rows*cols*channels的三維矩陣,因此,我們可以使用img[i,j,k]來訪問像素值。
例1:打開圖片,并隨機(jī)添加一些椒鹽噪聲
from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
img=np.array(Image.open('d:/ex.jpg'))
#隨機(jī)生成5000個(gè)椒鹽
rows,cols,dims=img.shape
for i in range(5000):
x=np.random.randint(0,rows)
y=np.random.randint(0,cols)
img[x,y,:]=255
plt.figure("beauty")
plt.imshow(img)
plt.axis('off')
plt.show()

例2:將lena圖像二值化,像素值大于128的變?yōu)?,否則變?yōu)?
from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
img=np.array(Image.open('d:/pic/lena.jpg').convert('L'))
rows,cols=img.shape
for i in range(rows):
for j in range(cols):
if (img[i,j]<=128):
img[i,j]=0
else:
img[i,j]=1
plt.figure("lena")
plt.imshow(img,cmap='gray')
plt.axis('off')
plt.show()

如果要對(duì)多個(gè)像素點(diǎn)進(jìn)行操作,可以使用數(shù)組切片方式訪問。切片方式返回的是以指定間隔下標(biāo)訪問 該數(shù)組的像素值。下面是有關(guān)灰度圖像的一些例子:
img[i,:] = im[j,:] # 將第 j 行的數(shù)值賦值給第 i 行 img[:,i] = 100 # 將第 i 列的所有數(shù)值設(shè)為 100 img[:100,:50].sum() # 計(jì)算前 100 行、前 50 列所有數(shù)值的和 img[50:100,50:100] # 50~100 行,50~100 列(不包括第 100 行和第 100 列) img[i].mean() # 第 i 行所有數(shù)值的平均值 img[:,-1] # 最后一列 img[-2,:] (or im[-2]) # 倒數(shù)第二行
以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Python利用ElementTree模塊處理XML的方法詳解
ElementTree是python的XML處理模塊,它提供了一個(gè)輕量級(jí)的對(duì)象模,下面這篇文章就來給大家介紹了關(guān)于Python利用ElementTree模塊處理XML的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起看看吧。2017-08-08
如何使用?profile?進(jìn)行python代碼性能分析
對(duì)代碼優(yōu)化的前提是需要了解性能瓶頸在什么地方,程序運(yùn)行的主要時(shí)間是消耗在哪里,對(duì)于比較復(fù)雜的代碼可以借助一些工具來定位,python?內(nèi)置了豐富的性能分析工具,本文介紹如何使用profile進(jìn)行python代碼性能分析,感興趣的朋友一起看看吧2024-12-12
django修改models重建數(shù)據(jù)庫的操作
這篇文章主要介紹了django修改models重建數(shù)據(jù)庫的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-03-03
python借助ChatGPT讀取.env實(shí)現(xiàn)文件配置隔離保障私有數(shù)據(jù)安全
這篇文章主要為大家介紹了python讀取.env實(shí)現(xiàn)文件配置隔離保障私有數(shù)據(jù)安全,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-03-03
Django+Uwsgi+Nginx如何實(shí)現(xiàn)生產(chǎn)環(huán)境部署
這篇文章主要介紹了Django+Uwsgi+Nginx如何實(shí)現(xiàn)生產(chǎn)環(huán)境部署,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-07-07
Python MySQL 日期時(shí)間格式化作為參數(shù)的操作
這篇文章主要介紹了Python MySQL 日期時(shí)間格式化作為參數(shù)的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-03-03

