python找出在原图中的位置_用python简单处理图片(4):图像中的像素访问
前面的一些例子中,我們都是利用Image.open()來打開一幅圖像,然后直接對這個PIL對象進行操作。如果只是簡單的操作還可以,但是如果操作稍微復(fù)雜一些,就比較吃力了。因此,通常我們加載完圖片后,都是把圖片轉(zhuǎn)換成矩陣來進行更加復(fù)雜的操作。
python中利用numpy庫和scipy庫來進行各種數(shù)據(jù)操作和科學(xué)計算。我們可以通過pip來直接安裝這兩個庫
pip install numpy
pip install scipy
以后,只要是在python中進行數(shù)字圖像處理,我們都需要導(dǎo)入這些包:
from PIL importImageimportnumpy as npimport matplotlib.pyplot as plt
打開圖像并轉(zhuǎn)化為矩陣,并顯示:
from PIL importImageimportnumpy as npimportmatplotlib.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對象轉(zhuǎn)換為數(shù)組對象。
查看圖片信息,可用如下的方法:
printimg.shapeprintimg.dtypeprintimg.sizeprint type(img)
如果是RGB圖片,那么轉(zhuǎn)換為array之后,就變成了一個rows*cols*channels的三維矩陣,因此,我們可以使用
img[i,j,k]
來訪問像素值。
例1:打開圖片,并隨機添加一些椒鹽噪聲
from PIL importImageimportnumpy as npimportmatplotlib.pyplot as plt
img=np.array(Image.open('d:/ex.jpg'))#隨機生成5000個椒鹽
rows,cols,dims=img.shapefor i in range(5000):
x=np.random.randint(0,rows)
y=np.random.randint(0,cols)
img[x,y,:]=255plt.figure("beauty")
plt.imshow(img)
plt.axis('off')
plt.show()
例2:將lena圖像二值化,像素值大于128的變?yōu)?,否則變?yōu)?
from PIL importImageimportnumpy as npimportmatplotlib.pyplot as plt
img=np.array(Image.open('d:/pic/lena.jpg').convert('L'))
rows,cols=img.shapefor i inrange(rows):for j inrange(cols):if (img[i,j]<=128):
img[i,j]=0else:
img[i,j]=1plt.figure("lena")
plt.imshow(img,cmap='gray')
plt.axis('off')
plt.show()
如果要對多個像素點進行操作,可以使用數(shù)組切片方式訪問。切片方式返回的是以指定間隔下標訪問 該數(shù)組的像素值。下面是有關(guān)灰度圖像的一些例子:
img[i,:] = im[j,:] #將第 j 行的數(shù)值賦值給第 i 行
img[:,i]= 100 #將第 i 列的所有數(shù)值設(shè)為 100
img[:100,:50].sum() #計算前 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ù)第二行
總結(jié)
以上是生活随笔為你收集整理的python找出在原图中的位置_用python简单处理图片(4):图像中的像素访问的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 电脑怎么重新用u盘装系统视频 如何使用U
- 下一篇: win7怎么安装搜狗输入法 如何在win