開發(fā)工具
Python版本:3.6.4
相關(guān)模塊:
cv2模塊;
以及一些Python自帶的模塊。
環(huán)境搭建
安裝Python并添加到環(huán)境變量,pip安裝需要的相關(guān)模塊即可。
原理簡介
簡單地講一講Haar分類器,也就是Viola-Jones識別器。
詳細的原理說明可參考相關(guān)文件中的兩篇論文:
Rapid Object Detection using a Boosted Cascade of Simple Features;
Robust Real-Time Face Detection.
(1)Haar-like特征
Haar-like矩形特征是用于物體檢測的數(shù)字圖像特征,由兩個或者多個相鄰的黑白矩形組合而成,矩形的特征值是白色矩形的灰度值之和減去黑色矩形的灰度值之和。一般地,我們認為矩形特征對一些簡單的圖形結(jié)構(gòu)(線段、邊緣)等較為敏感:

具體到貓臉檢測而言,我們認為把這樣的矩形放到一個非貓臉區(qū)域后獲得的特征值與放到一個貓臉區(qū)域后獲得的特征值是不同的。
利用上述基于特征的檢測算法,不僅能夠編碼特定區(qū)域的狀態(tài),而且效率高于基于像素的檢測算法。
(2)積分圖
下面我們來考慮一下如何計算矩形的特征值。對圖像中的任意一點A(x, y),定義該點的積分圖為其左上角的所有像素值之和,即:

因此,要計算矩形模板的特征值,也就是計算兩個區(qū)域之間的像素和之差,只需要用特征區(qū)域端點的積分圖來進行簡單的加減運算就可以了:

(3)Haar分類器
Haar分類器是一個監(jiān)督學習分類器,要進行目標檢測,首先要對圖像進行直方圖均衡化和歸一化處理,然后檢測里面是否包含要檢測的物體。
流程框架圖為(Haar分類器本質(zhì)上由Haar特征提取器、離散強分類器以及強分類級聯(lián)器組成):

Haar分類器使用Adaboost算法,但是把它組織為了篩選式的級聯(lián)分類器,在任意一級計算中,**一旦獲得輸入內(nèi)容不在檢測類中的結(jié)論,便終止計算,只有通過所有級別的分類器,才可認為檢測到了目標物體,**以此來提高檢測效率。
關(guān)于AdaBoost算法,我就不展開介紹了,有興趣的同學可以自己查找相關(guān)資料進行學習。以后有時間我再對其進行詳細的介紹。
(4)適用范圍
適用于“基本剛性”的物體檢測,如臉、汽車、人體和自行車等等。
(5)總結(jié)
Viola-Jones目標檢測框架的核心思想是通過滑動窗口掃描圖像(多尺度的掃描),然后將每個窗口的Haar特征值輸入到篩選式的級聯(lián)分類器中來判斷該窗口內(nèi)是否含有目標物體以實現(xiàn)目標檢測。
具體實現(xiàn)
OpenCV中內(nèi)置了基于Viola-Jones目標檢測框架的Haar分類器,并提供了貓臉檢測預(yù)訓(xùn)練好的模型。因此實現(xiàn)起來十分簡單。
具體實現(xiàn)過程詳見相關(guān)文件中的源代碼。
效果演示
使用方式:
修改源代碼中的圖片名為自己需要檢測的圖片:

在cmd窗口運行DetectCatFace.py文件即可。
效果:
原圖1:

檢測結(jié)果1:

原圖2:

檢測結(jié)果2(并不能很好地區(qū)分狗狗和貓咪):

到此這篇關(guān)于Python實戰(zhàn)之OpenCV實現(xiàn)貓臉檢測的文章就介紹到這了,更多相關(guān)OpenCV實現(xiàn)貓臉檢測內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
您可能感興趣的文章:- python基于Opencv實現(xiàn)人臉口罩檢測
- Python-OpenCV實現(xiàn)圖像缺陷檢測的實例
- opencv實現(xiàn)顏色檢測
- python調(diào)用opencv實現(xiàn)貓臉檢測功能