自己看了下python,本來想照教程上一點一點學的,學了一會發現好沒勁(教程本身質量很好),學python就是為了好玩,為什么還這么按部就班勒?果斷google下python的爬蟲(開始目的是這個),按照一很簡單的demo,自己也寫了個很簡單的小程序(urllib2+re),爬美女吧的美女圖片。其實爬圖片本身并不難(一會兒就爬了一千都張),難的是圖片質量參差不齊,怎么加以區別。質量包括圖片本身的分辨率和圖片的‘美感’,于是突然就想到了圖像識別,把那些不美(搞笑圖片和長的不美)的去掉,而且說干就干,雖然也是小白
google下python圖片操作,了解到PIL(python Image Lib),去官網下。windows版官方只有32位版,如果是64位的python好像還不兼容。。。我用的mac,下的源碼。裝之前還要裝依賴,教程可以參考這里。中間遇到了‘include <X11/Xlib.h>’
,可以參考這里。而且win版好像的show函數好像有問題,得改源碼。。。反正各種問題,畢竟這么老了,感覺官方也放棄了,不過夠用就行了
PIL裝好之后, 就可以開工了。當然啦,圖像識別也不可能是一步到位的事,畢竟不是那么簡單嘛
首先就是對圖片處理有個簡單的概念。一張圖片是由若干像素組成,而一個像素則由很多分量(通道)組成,每種分量大小的共同作用于一個像素,而成千上萬個像素則組成了宏觀上的圖片,分量數和每個分量的位數共同決定了圖片的位數。比如一張分辨率為1920*1080的美女圖片,每一行就有1920個像素,每一列有1080個像素,那么總共就有1920X1080個像素。而一個像素最常見的是由R(red),G(green),B(blue)分量(通道)組成。而每一個分量一般用8位bit來表示,所以每一個分量就有2^8 = 256(0~255)種可能。分量數為3,每個分量有8位,圖片就為3X8=24位。而有一種32位的圖就是在24位的上加上一個alpha(透明度)分量,比如png格式的圖片就可以表示一張背景透明的圖。現在我們可以計算下,一張這樣24位,1920*1080分辨率的圖片的大小了。1920X1080*24 ~ 6MB,可是我們一般遇到的圖片都不會有這么大,那是壓縮之后的結果,jpeg就是一種壓縮率可以很高的圖片格式,而且是有損壓縮(據說損失的都不重要)。
有了圖片的基礎知識之后,接下來就可以開始了。圖片的處理也就是將某些指定的像素設為特定的值而已了
下面舉個小demo:
預期效果:對稱效果,讓圖片的左邊與右邊對稱,可以惡搞別人
示例代碼:
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()
效果:
? ? ??
?
在來一張上下的