遍歷圖片對(duì)象?可是怎么個(gè)遍歷法呢?Pillow 提供了一個(gè) .load() 方法,用來(lái)處理像素。圖片嘛,當(dāng)然是二維的,有寬和高的。
創(chuàng)新互聯(lián)專注于企業(yè)網(wǎng)絡(luò)營(yíng)銷推廣、網(wǎng)站重做改版、邳州網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、HTML5建站、商城建設(shè)、集團(tuán)公司官網(wǎng)建設(shè)、成都外貿(mào)網(wǎng)站建設(shè)公司、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁(yè)設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性價(jià)比高,為邳州等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。
pixels = image.load()
for x in ramge(image.width):
for y in range(image.height):
pixsels[x, y] = 255 if pixsels[x, y] 125 else 0
當(dāng)然了,只是最簡(jiǎn)單的二值化的話,直接 image.convert('1') 就可以了 :-)
閾值化:給定一個(gè)數(shù)組和一個(gè)與之,然后根據(jù)數(shù)組中的每個(gè)元素的值,是高于還是低于閾值而進(jìn)行一些操作。如果像素值大于閾值,則分配給它一個(gè)值(如白色的),否則它被分配給另一個(gè)值(如黑色)。
此為固定閾值的事例。具體效果如下:
函數(shù)中四個(gè)參數(shù)分別是原圖像、閾值、最大值、閾值類型
閾值類型一般分為五種:
cv2.THRESH_BINARY——大于閾值的部分像素值變?yōu)樽畲笾?,其他變?yōu)?
cv2.THRESH_BINARY_INV——大于閾值的部分變?yōu)?,其他部分變?yōu)樽畲笾?/p>
cv2.THRESH_TRUNC——大于閾值的部分變?yōu)殚撝担溆嗖糠植蛔?/p>
cv2.THRESH_TOZERO——大于閾值的部分不變,其余部分變?yōu)?
cv2.THRESH_TOZERO_INV——大于閾值的部分變?yōu)?,其余部分不變
自適應(yīng)閾值是根據(jù)圖像上的每一個(gè)小區(qū)域計(jì)算與其對(duì)應(yīng)的閾值,因此在同一幅圖像上采用的是不同的閾值,從而能使我們?cè)诹炼?不同的情況下得到更好的結(jié)果。
th2為算術(shù)平均法的自適應(yīng)二值化
th3為高斯加權(quán)均值法自適應(yīng)二值化
結(jié)果如下:
圖像的灰度處理:
CV_LOAD_IMAGE_GRAYSCALE,這是最簡(jiǎn)單之間的辦法,在加載圖像時(shí)直接處理
IplImage*
Igray=
cvLoadImage
("test.jpg",CV_LOAD_IMAGE_GRAYSCALE);
得到的圖像就是單通道的,也能夠用這個(gè)函數(shù):CVAPI(void)
cvCvtColor
(
const
CvArr*
src,
CvArr*
dst,
int
code
);
code=CV_BGR2GRAY;
opencv還提供了非常多方式,我這邊就不一一舉例了。
Python圖像處理是一種簡(jiǎn)單易學(xué),功能強(qiáng)大的解釋型編程語(yǔ)言,它有簡(jiǎn)潔明了的語(yǔ)法,高效率的高層數(shù)據(jù)結(jié)構(gòu),能夠簡(jiǎn)單而有效地實(shí)現(xiàn)面向?qū)ο缶幊?,下文進(jìn)行對(duì)Python圖像處理進(jìn)行說(shuō)明。
當(dāng)然,首先要感謝“戀花蝶”,是他的文章“用Python圖像處理 ” 幫我堅(jiān)定了用Python和PIL解決問(wèn)題的想法,對(duì)于PIL的一些介紹和基本操作,可以看看這篇文章。我這里主要是介紹點(diǎn)我在使用過(guò)程中的經(jīng)驗(yàn)。
PIL可以對(duì)圖像的顏色進(jìn)行轉(zhuǎn)換,并支持諸如24位彩色、8位灰度圖和二值圖等模式,簡(jiǎn)單的轉(zhuǎn)換可以通過(guò)Image.convert(mode)函數(shù)完 成,其中mode表示輸出的顏色模式。例如''L''表示灰度,''1''表示二值圖模式等。
但是利用convert函數(shù)將灰度圖轉(zhuǎn)換為二值圖時(shí),是采用固定的閾 值127來(lái)實(shí)現(xiàn)的,即灰度高于127的像素值為1,而灰度低于127的像素值為0。為了能夠通過(guò)自定義的閾值實(shí)現(xiàn)灰度圖到二值圖的轉(zhuǎn)換,就要用到 Image.point函數(shù)。
深度剖析Python語(yǔ)法功能
深度說(shuō)明Python應(yīng)用程序特點(diǎn)
對(duì)Python數(shù)據(jù)庫(kù)進(jìn)行學(xué)習(xí)研究
Python開發(fā)人員對(duì)Python經(jīng)驗(yàn)之談
對(duì)Python動(dòng)態(tài)類型語(yǔ)言解析
Image.point函數(shù)有多種形式,這里只討論Image.point(table, mode),利用該函數(shù)可以通過(guò)查表的方式實(shí)現(xiàn)像素顏色的模式轉(zhuǎn)換。其中table為顏色轉(zhuǎn)換過(guò)程中的映射表,每個(gè)顏色通道應(yīng)當(dāng)有256個(gè)元素,而 mode表示所輸出的顏色模式,同樣的,''L''表示灰度,''1''表示二值圖模式。
可見,轉(zhuǎn)換過(guò)程的關(guān)鍵在于設(shè)計(jì)映射表,如果只是需要一個(gè)簡(jiǎn)單的箝位值,可以將table中高于或低于箝位值的元素分別設(shè)為1與0。當(dāng)然,由于這里的table并沒(méi)有什么特殊要求,所以可以通過(guò)對(duì)元素的特殊設(shè)定實(shí)現(xiàn)(0, 255)范圍內(nèi),任意需要的一對(duì)一映射關(guān)系。
示例代碼如下:
import Image # load a color image im = Image.open(''fun.jpg'') # convert to grey level image Lim = im.convert(''L'') Lim.save(''fun_Level.jpg'') # setup a converting table with constant threshold threshold = 80 table = [] for i in range(256): if i threshold: table.append(0) else: table.append(1) # convert to binary image by the table bim = Lim.point(table, ''1'') bim.save(''fun_binary.jpg'')
IT部分通常要完成的任務(wù)相當(dāng)繁重但支撐這些工作的資源卻很少,這已經(jīng)成為公開的秘密。任何承諾提高編碼效率、降低軟件總成本的IT解決方案都應(yīng)該進(jìn)行 周到的考慮。Python圖像處理所具有的一個(gè)顯著優(yōu)勢(shì)就是可以在企業(yè)的軟件創(chuàng)建和維護(hù)階段節(jié)約大量資金,而這兩個(gè)階段的軟件成本占到了軟件整個(gè)生命周期中總成本 的50%到95%。
Python清晰可讀的語(yǔ)法使得軟件代碼具有異乎尋常的易讀性,甚至對(duì)那些不是最初接觸和開發(fā)原始項(xiàng)目的程序員都 能具有這樣的強(qiáng)烈感覺(jué)。雖然某些程序員反對(duì)在Python代碼中大量使用空格。
不過(guò),幾乎人人都承認(rèn)Python圖像處理的可讀性遠(yuǎn)勝于C或者Java,后兩 者都采用了專門的字符標(biāo)記代碼塊結(jié)構(gòu)、循環(huán)、函數(shù)以及其他編程結(jié)構(gòu)的開始和結(jié)束。提倡Python的人還宣稱,采用這些字符可能會(huì)產(chǎn)生顯著的編程風(fēng)格差 異,使得那些負(fù)責(zé)維護(hù)代碼的人遭遇代碼可讀性方面的困難。轉(zhuǎn)載
1、查找輪廓(find_contours)
measure模塊中的find_contours()函數(shù),可用來(lái)檢測(cè)二值圖像的邊緣輪廓。
函數(shù)原型為:
skimage.measure.find_contours(array,?level)
array: 一個(gè)二值數(shù)組圖像
level: 在圖像中查找輪廓的級(jí)別值
返回輪廓列表集合,可用for循環(huán)取出每一條輪廓。
例1:
import?numpy?as?np
import?matplotlib.pyplot?as?plt
from?skimage?import?measure,draw?
#生成二值測(cè)試圖像
img=np.zeros([100,100])
img[20:40,60:80]=1??#矩形
rr,cc=draw.circle(60,60,10)??#小圓
rr1,cc1=draw.circle(20,30,15)?#大圓
img[rr,cc]=1
img[rr1,cc1]=1
#檢測(cè)所有圖形的輪廓
contours?=?measure.find_contours(img,?0.5)
#繪制輪廓
fig,?(ax0,ax1)?=?plt.subplots(1,2,figsize=(8,8))
ax0.imshow(img,plt.cm.gray)
ax1.imshow(img,plt.cm.gray)
for?n,?contour?in?enumerate(contours):
ax1.plot(contour[:,?1],?contour[:,?0],?linewidth=2)
ax1.axis('image')
ax1.set_xticks([])
ax1.set_yticks([])
plt.show()
結(jié)果如下:不同的輪廓用不同的顏色顯示
網(wǎng)頁(yè)名稱:python圖像二值函數(shù) 圖像二值化函數(shù)
分享地址:http://chinadenli.net/article44/hgdjhe.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供商城網(wǎng)站、動(dòng)態(tài)網(wǎng)站、品牌網(wǎng)站制作、網(wǎng)站營(yíng)銷、Google、移動(dòng)網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)