OpenCV檢測篇(一)——貓臉檢測

騰訊雲技術社區-掘金主頁持續爲你們呈現雲計算技術文章,歡迎你們關注!python


做者:劉瀟龍算法

OpenCV

OpenCV是時下最流行的基於C++的開源計算機視覺庫,它功能豐富,函數衆多,從最基本的讀寫圖片,到簡單的圖像處理(好比降噪濾波、邊緣檢測、圖像變換、特徵提取等),再到更加高級的行人檢測、人臉識別、文本識別等,盡皆包含。在OpenCV提供的函數的基礎上,咱們能夠很方便地開發本身的應用,實現本身的算法。總的來講,就是OpenCV很是強大。具體有多強大?那得用了才知道。函數

不少要作人臉識別,要用到SIFT特徵的人都問過的一個問題是,爲何配置好opencv以後,卻找不到人臉識別的頭文件,找不到SIFT在哪?這是由於OpenCV3.0以後,把一些還在最新的,但不是很穩定的,還在測試階段的東西放在了contrib模塊裏面。並且官方默認不帶contrib模塊。不幸的是,咱們最想用的人臉識別和SIFT特徵都在contrib裏面。若是須要用的話,那就須要本身編譯了。opencv在Visual Studio上的配置和編譯contrib的方法能夠參考我以前的博客。今天的內容仍然是用Python語言,最近用Python用着比較順手。測試

OpenCV的Python環境配置

顯然,跟衆多基於C++的庫同樣, OpenCV也是有Python接口的。Python下配置OpenCV能夠用下面兩種方法:網站

  1. 官網下載並安裝OpenCV以後,在目錄\opencv\build\python\2.7\x64之下有一個cv2.pyd文件,把它拷貝到python安裝目錄下的\Lib\site-packages文件夾下面便可。須要注意的是版本要對應,好比這裏就要對應64位的Python2.7。並且目前官方自帶的只有Python2.7版本的包。若是想要其餘版本怎麼辦?ui

  2. 那就要說到一個神奇的網站了:Unofficial Windows Binaries for Python Extension Packages,這裏麪包含了幾乎全部的能用到的Python庫的安裝包,好比咱們須要的OpenCV,這裏能夠找到下面這麼多版本,能夠適應不一樣的需求,還有編譯的contrib版本的,簡直是驚喜。雲計算

按照本身的環境下載相應的版本,而後仍是用pip安裝,命令以下:spa

pip install *.whlcode

請把星號換成對應的名字。xml

我這裏用的是Python3.6包含contrib的64位的包。

貓臉檢測

喵星人真的是要統治世界了。否則爲何OpenCV自帶的檢測器中除了人臉檢測、行人檢測這些意料之中就應該存在的檢測器以外,還悄悄多出了貓臉檢測器呢。

今天咱們就來試一下這個貓臉檢測到底 是什麼樣的?基於OpenCV的貓臉檢測十分簡單。用Python的話只有區區20行代碼。其中20行代碼中發揮主要做用的只有一個函數:

detectMultiScale()

此函數的做用是,在輸入圖像中檢測不一樣尺寸的對象,返回包含對象的矩形框。它接收的參數:

1.image——輸入圖像

2.scaleFactor——表示每輪檢測圖像齒輪減小的比例

3.minNeighbors——指明對象要至少被檢測到幾回才能斷定對象確實存在

4.minSize——檢測對象的最小尺寸

5.maxSize——檢測對象的最大尺寸

代碼

按照慣例,註釋齊全,無需多說。

# -*- coding=utf-8 -*-
import cv2
# 加載貓臉檢測器
catPath = "haarcascade_frontalcatface.xml"
faceCascade = cv2.CascadeClassifier(catPath)
# 讀取圖片並灰度化
img = cv2.imread("cat1.jpg")  
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 貓臉檢測
faces = faceCascade.detectMultiScale(
    gray,
    scaleFactor= 1.02,
    minNeighbors=3,
    minSize=(150, 150),
    flags=cv2.CASCADE_SCALE_IMAGE
)
# 框出貓臉並加上文字說明
for (x, y, w, h) in faces:
    cv2.rectangle(img, (x, y), (x+w, y+h), (0, 0, 255), 2)
    cv2.putText(img,'Cat',(x,y-7), 3, 1.2, (0, 255, 0), 2, cv2.LINE_AA)
# 顯示圖片並保存
cv2.imshow('Cat?', img)
cv2.imwrite("cat.jpg",img)
c = cv2.waitKey(0)複製代碼

效果

運行Python腳本後效果以下:

觸類旁通

本文雖然只是在說貓臉檢測,可是在OpenCV下,人臉檢測、行人檢測、人眼檢測等都是一樣的道理,一樣的流程。只須要把最開始相應的檢測器換掉,而後按照實際狀況調節detectMultiScale()的參數便可。好比如下是人臉檢測的效果:

相關閱讀

OpenCV檢測篇(二)——笑臉檢測
超級無敵鑑黃師-萬象優圖


此文已由做者受權騰訊雲技術社區發佈,轉載請註明文章出處;獲取更多雲計算技術乾貨,可請前往騰訊雲技術社區

相關文章
相關標籤/搜索