快過年了,各類互聯網產品都出來撒紅包。某寶一年一度的「集五福活動」更是成爲每一年的必備活動之一。python
雖然到最後每人大概也就分個兩塊錢,但做爲一個全民話題,大多數人仍是願意湊湊熱鬧。web
畢竟對於現在生活在大城市的人來講,集福領紅包和空蕩的地鐵車箱或許已經是最大的「年味」了。app
!ui
既然是湊熱鬧,怎麼能少得了我。spa
以前我(GitPython公衆號)發過一篇:《10幾行代碼,用python打造實時截圖識別OCR》,介紹的是OCR文字識別的使用。code
本篇文章再來對「福」字作文章,演示下如何用python圖像處理功能,把一幅「福」字圖片轉出 5 種不一樣的效果:orm
python最圖像處理最經常使用的兩個模塊是PIL和OpenCV,這裏咱們選擇 OpenCV。blog
讀取圖片及展現代碼:圖片
由於 OpenCV 和 matplotlib 的顏色模式不同,因此須要作一次轉換,若是是直接經過 cv2 展現和保存圖片則不須要。ip
上面的效果分別用到了如下功能:
01
灰度福
這裏沒有選擇直接將圖片轉出灰度圖,由於這樣會致使福字不明顯。而是經過將紅、綠、藍三通道分離後,選擇色差最大的紅色通道。
02
輪廓福
使用了 OpenCV 自帶的圖像輪廓提取功能。爲了更好的效果,這裏對紅色通道進行二值化後,再查找輪廓。
03
反色福
髮色的實現是將每一個像素值 x 轉成 255-x。若是遍歷像素計算會比較慢,因而用了一個小技巧:轉成numpy的ndarray再進行矩陣運算。
04
膨脹福
這裏實際上是「圖像腐蝕」操做(與「圖像膨脹」操做相反)。由於在咱們選取的紅色通道中,白色是背景,黑色纔是福字,因此對白色的「腐蝕」也就是對黑色的「膨脹」。這也是OpenCV的內置功能。
作完這一步,又對圖像進行了切割,直接經過列表的切片操做實現。
05
福到了
OpenCV 提供了翻轉操做,第二個參數是旋轉軸的選取,你能夠試試 0 和 1 的效果。