OpenCV-Python速查表:從導入圖像到人臉檢測
——本文對圖像裁剪、調整大小、旋轉、閾值、模糊、在圖像上繪圖和書寫、人臉檢測和使用輪廓圖像檢測對象都進行了解釋。
打開今日頭條,查看更多圖片什麼是OpenCV-Python?
OpenCV是一個開源的計算機視覺(computer vision)和機器學習庫。它擁有超過2500個優化演算法,包括經典和最先進的計算機視覺和機器學習演算法。它有很多語言介面,包括Python、Java、c++和Matlab。
這裡,我們將處理Python介面。
安裝
- 在Windows上, 請在這裡查看指南。地址:https://opencv-python-tutroals.readthedocs.io/en/latest/py_tutorials/py_setup/py_setup_in_windows/py_setup_in_windows.html
- 在 Linux上, 請在這裡查看指南。地址:https://docs.opencv.org/trunk/d7/d9f/tutorial_linux_install.html
圖像導入&顯示
警告1: 通過openCV讀取圖像時,它不是以RGB 顏色空間來讀取,而是以BGR 顏色空間。有時候這對你來說不是問題,只有當你想在圖片中添加一些顏色時,你才會遇到問題。
有兩種解決方案:
- 將R?—?第一個顏色值(紅色)和B —?第三個顏色值(藍色) 交換, 這樣紅色就是 (0,0,255) 而不是(255,0,0)。
- 將顏色空間變成RGB:
使用rgb_image代替image繼續處理代碼。
警告2: 要關閉顯示圖像的窗口,請按任意按鈕。如果你使用關閉按鈕,它可能會導致窗口凍結(我在Jupyter筆記本上運行代碼時發生了這種情況)。
為了簡單起見,在整個教程中,我將使用這種方法來查看圖像:
來源:Pixabay
裁剪
來源:Pixabay
裁剪後的狗狗
其中: image[10:500,500:200] 是 image[y:y+h,x:x+w]。
調整大小
來源:Pexels
調整大小到20%後
這個調整大小函數會保持原始圖像的尺寸比例。
更多圖像縮放函數,請查看這裡。(https://www.tutorialkart.com/opencv/python/opencv-python-resize-image/ )
旋轉
左圖: 圖片來自Pexels的Jonathan Meyer。右圖: 進行180度旋轉之後的狗狗。
image.shape輸出高度、寬度和通道。M是旋轉矩陣——它將圖像圍繞其中心旋轉180度。
-ve表示順時針旋轉圖像的角度 & +ve逆表示逆時針旋轉圖像的角度。
灰度和閾值(黑白效果)
來源:Pexels
gray_image 是灰度圖像的單通道版本。
這個threshold函數將把所有比127深(小)的像素點陰影值設定為0,所有比127亮(大)的像素點陰影值設定為255。
另一個例子:
這將把所有陰影值小於150的像素點設定為10和所有大於150的像素點設定為200。
更多有關thresholding函數的內容,請查看這裡。(https://docs.opencv.org/3.4/d7/d4d/tutorial_py_thresholding.html )
左圖:灰階狗狗。右圖:黑白狗狗。
模糊/平滑
左圖:圖像來自Pixabay。右圖:模糊後的狗狗。
高斯模糊函數接受3個參數:
- 第一個參數是要模糊的圖像。
- 第二個參數必須是一個由兩個正奇數組成的元組。當它們增加,模糊效果也會增加。
- 第三個參數是sigmaX和sigmaY。當左邊位於0時,它們會自動從內部大小計算出來。
更多關於模糊函數的內容,請查看這裡。(https://docs.opencv.org/3.1.0/d4/d13/tutorial_py_filtering.html )
在圖像上繪製矩形框或邊框
左圖:圖像來自Pixabay。右圖:臉上有一個矩形框的狗狗。
rectangle函數接受5個參數:
- 第一個參數是圖像。
- 第二個參數是x1, y1 -左上角坐標。
- 第三個參數是x2, y2 -右下角坐標。
- 第四個參數是矩形顏色(GBR/RGB,取決於你如何導入圖像)。
- 第五個參數是矩形線寬。
繪製一條線
左圖:圖像來自Pixabay。右圖:兩隻狗狗用一條線分開。
line函數接受5個參數:
- 第一個參數是要畫的線所在的圖像。
- 第二個參數是x1, y1。
- 第三個參數是x2, y2。
- 第四個參數是線條顏色(GBR/RGB,取決於你如何導入圖像)。
- 第五個參數是線寬。
在圖片上寫入文字
左圖:圖像來自Pixabay。右圖:兩隻狗狗用一條線分開。
putText函數接受 七個參數:
- 第一個參數是要寫入文本的圖像。
- 第二個參數是待寫入文本。
- 第三個參數是x, y——文本開始的左下角坐標。
- 第四個參數是字體類型。
- 第五個參數是字體大小。
- 第六個參數是顏色(GBR/RGB,取決於你如何導入圖像)。
- 第七個參數是文本線條的粗細。
人臉檢測
這裡沒有找到狗狗照片,很遺憾:(
圖片來自Pixabay,作者:Free-Photos。
detectMultiScale函數是一種檢測對象的通用函數。因為我們調用的是人臉級聯,所以它會檢測到人臉。
detectMultiScale函數接受4個參數:
- 第一個參數是灰階圖像。
- 第二個參數是scaleFactor。因為有些人臉可能離鏡頭更近,所以看起來會比後台的人臉更大。比例係數彌補了這一點。
- 檢測演算法使用一個移動窗口來檢測對象。minNeighbors定義在當前對象附近檢測到多少對象,然後再聲明檢測到人臉。
- 與此同時,minsize給出了每個窗口的大小。
檢測到兩張人臉。
輪廓——一種對象檢測方法
使用基於顏色的圖像分割,你可以來檢測對象。
cv2.findContours & cv2.drawContours 這兩個函數可以幫助你做到這一點。
最近,我寫了一篇非常詳細的文章,叫做《使用Python通過基於顏色的圖像分割來進行對象檢測》。你需要知道的關於輪廓的一切都在那裡。(https://towardsdatascience.com/object-detection-via-color-based-image-segmentation-using-python-e9b7c72f0e11 )
最終,保存圖片
總結
OpenCV是一個非常容易使用的演算法庫,可以用於3D建模、高級圖像和視頻編輯、跟蹤視頻中的標識對象、對視頻中正在做某個動作的人進行分類、從圖像數據集中找到相似的圖像,等等。
最重要的是,學習OpenCV對於那些想要參與與圖像相關的機器學習項目的人來說是至關重要的。
英文原文:https://qiniumedia.freelycode.com/vcdn/1/%E4%BC%98%E8%B4%A8%E6%96%87%E7%AB%A0%E9%95%BF%E5%9B%BE3/opencv-python-cheetsheet.pdf 譯者:好酒不上頭
※如何在不停機的情況下在Django中創建索引
※Google出品的Python代碼靜態類型分析器:Pytype
TAG:Python部落 |