PIL简单图片处理(上)
自己看了下python,本來(lái)想照教程上一點(diǎn)一點(diǎn)學(xué)的,學(xué)了一會(huì)發(fā)現(xiàn)好沒(méi)勁(教程本身質(zhì)量很好),學(xué)python就是為了好玩,為什么還這么按部就班勒?果斷google下python的爬蟲(chóng)(開(kāi)始目的是這個(gè)),按照一很簡(jiǎn)單的demo,自己也寫(xiě)了個(gè)很簡(jiǎn)單的小程序(urllib2+re),爬美女吧的美女圖片。其實(shí)爬圖片本身并不難(一會(huì)兒就爬了一千都張),難的是圖片質(zhì)量參差不齊,怎么加以區(qū)別。質(zhì)量包括圖片本身的分辨率和圖片的‘美感’,于是突然就想到了圖像識(shí)別,把那些不美(搞笑圖片和長(zhǎng)的不美)的去掉,而且說(shuō)干就干,雖然也是小白
google下python圖片操作,了解到PIL(python Image Lib),去官網(wǎng)下。windows版官方只有32位版,如果是64位的python好像還不兼容。。。我用的mac,下的源碼。裝之前還要裝依賴,教程可以參考這里。中間遇到了‘include <X11/Xlib.h>’,可以參考這里。而且win版好像的show函數(shù)好像有問(wèn)題,得改源碼。。。反正各種問(wèn)題,畢竟這么老了,感覺(jué)官方也放棄了,不過(guò)夠用就行了
PIL裝好之后, 就可以開(kāi)工了。當(dāng)然啦,圖像識(shí)別也不可能是一步到位的事,畢竟不是那么簡(jiǎn)單嘛
首先就是對(duì)圖片處理有個(gè)簡(jiǎn)單的概念。一張圖片是由若干像素組成,而一個(gè)像素則由很多分量(通道)組成,每種分量大小的共同作用于一個(gè)像素,而成千上萬(wàn)個(gè)像素則組成了宏觀上的圖片,分量數(shù)和每個(gè)分量的位數(shù)共同決定了圖片的位數(shù)。比如一張分辨率為1920*1080的美女圖片,每一行就有1920個(gè)像素,每一列有1080個(gè)像素,那么總共就有1920X1080個(gè)像素。而一個(gè)像素最常見(jiàn)的是由R(red),G(green),B(blue)分量(通道)組成。而每一個(gè)分量一般用8位bit來(lái)表示,所以每一個(gè)分量就有2^8 = 256(0~255)種可能。分量數(shù)為3,每個(gè)分量有8位,圖片就為3X8=24位。而有一種32位的圖就是在24位的上加上一個(gè)alpha(透明度)分量,比如png格式的圖片就可以表示一張背景透明的圖。現(xiàn)在我們可以計(jì)算下,一張這樣24位,1920*1080分辨率的圖片的大小了。1920X1080*24 ~ 6MB,可是我們一般遇到的圖片都不會(huì)有這么大,那是壓縮之后的結(jié)果,jpeg就是一種壓縮率可以很高的圖片格式,而且是有損壓縮(據(jù)說(shuō)損失的都不重要)。
有了圖片的基礎(chǔ)知識(shí)之后,接下來(lái)就可以開(kāi)始了。圖片的處理也就是將某些指定的像素設(shè)為特定的值而已了
下面舉個(gè)小demo:
預(yù)期效果:對(duì)稱(chēng)效果,讓圖片的左邊與右邊對(duì)稱(chēng),可以惡搞別人
示例代碼:
import PIL from Imagedef mirror(im):width,height = im.sizehalf = int(width/2)for x in range(half):for y in range(height):origin = im.getpixel((width-x-1,y))im.putpixel((x,y),origin)return imimageurl = './images/xg.jpg' image = Image.open(imageurl) image.show() image = mirror(image) image.show()
效果:
? ? ???
在來(lái)一張上下的
轉(zhuǎn)載于:https://www.cnblogs.com/ThrEcho/p/4957790.html
總結(jié)
以上是生活随笔為你收集整理的PIL简单图片处理(上)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: spring的applicationCo
- 下一篇: Spark学习体会