日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

OpenCV之objdetect 模块. 物体检测:级联分类器

發(fā)布時間:2025/3/21 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 OpenCV之objdetect 模块. 物体检测:级联分类器 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

級聯(lián)分類器

目標(biāo)

在這節(jié)教程中您將學(xué)到:

  • 使用?CascadeClassifier?類來檢測視頻流中的物體. 特別地, 我們將使用函數(shù):
    • load?來加載一個 .xml 分類器文件. 它既可以是Haar特征也可以是LBP特征的分類器.
    • detectMultiScale?來進(jìn)行圖像的多尺度檢測.

原理

代碼

本教程的代碼如下所示. 你也可以?點(diǎn)這里?下載. 第二個版本 (使用LBP進(jìn)行人臉檢測) 可以?從這里?找到.

#include "opencv2/objdetect/objdetect.hpp"#include "opencv2/highgui/highgui.hpp"#include "opencv2/imgproc/imgproc.hpp"#include <iostream>#include <stdio.h>using namespace std;using namespace cv;/** 函數(shù)聲明 */void detectAndDisplay( Mat frame );/** 全局變量 */string face_cascade_name = "haarcascade_frontalface_alt.xml";string eyes_cascade_name = "haarcascade_eye_tree_eyeglasses.xml";CascadeClassifier face_cascade;CascadeClassifier eyes_cascade;string window_name = "Capture - Face detection";RNG rng(12345);/** @主函數(shù) */int main( int argc, const char** argv ){CvCapture* capture;Mat frame;//-- 1. 加載級聯(lián)分類器文件if( !face_cascade.load( face_cascade_name ) ){ printf("--(!)Error loading\n"); return -1; };if( !eyes_cascade.load( eyes_cascade_name ) ){ printf("--(!)Error loading\n"); return -1; };//-- 2. 打開內(nèi)置攝像頭視頻流capture = cvCaptureFromCAM( -1 );if( capture ){while( true ){frame = cvQueryFrame( capture );//-- 3. 對當(dāng)前幀使用分類器進(jìn)行檢測if( !frame.empty() ){ detectAndDisplay( frame ); }else{ printf(" --(!) No captured frame -- Break!"); break; }int c = waitKey(10);if( (char)c == 'c' ) { break; }}}return 0;}/** @函數(shù) detectAndDisplay */ void detectAndDisplay( Mat frame ) {std::vector<Rect> faces;Mat frame_gray;cvtColor( frame, frame_gray, CV_BGR2GRAY );equalizeHist( frame_gray, frame_gray );//-- 多尺寸檢測人臉face_cascade.detectMultiScale( frame_gray, faces, 1.1, 2, 0|CV_HAAR_SCALE_IMAGE, Size(30, 30) );for( int i = 0; i < faces.size(); i++ ){Point center( faces[i].x + faces[i].width*0.5, faces[i].y + faces[i].height*0.5 );ellipse( frame, center, Size( faces[i].width*0.5, faces[i].height*0.5), 0, 0, 360, Scalar( 255, 0, 255 ), 4, 8, 0 );Mat faceROI = frame_gray( faces[i] );std::vector<Rect> eyes;//-- 在每張人臉上檢測雙眼eyes_cascade.detectMultiScale( faceROI, eyes, 1.1, 2, 0 |CV_HAAR_SCALE_IMAGE, Size(30, 30) );for( int j = 0; j < eyes.size(); j++ ){Point center( faces[i].x + eyes[j].x + eyes[j].width*0.5, faces[i].y + eyes[j].y + eyes[j].height*0.5 );int radius = cvRound( (eyes[j].width + eyes[i].height)*0.25 );circle( frame, center, radius, Scalar( 255, 0, 0 ), 4, 8, 0 );}}//-- 顯示結(jié)果圖像imshow( window_name, frame );}

代碼解釋

結(jié)果

  • 下圖就是使用上述代碼對內(nèi)置攝像頭的視頻流進(jìn)行人臉檢測的結(jié)果圖像:

    注意復(fù)制分類器文件?haarcascade_frontalface_alt.xml?和?haarcascade_eye_tree_eyeglasses.xml?到你的當(dāng)前目錄下. 他們在OpenCV安裝文件夾?opencv/data/haarcascades?里面.

  • 下圖是使用分類器文件?lbpcascade_frontalface.xml?(LBP特征訓(xùn)練的) 進(jìn)行的檢測結(jié)果. 對于雙眼的檢測依舊使用剛才使用過的分類器.


  • from:?http://www.opencv.org.cn/opencvdoc/2.3.2/html/doc/tutorials/objdetect/table_of_content_objdetect/table_of_content_objdetect.html#table-of-content-objdetect

    總結(jié)

    以上是生活随笔為你收集整理的OpenCV之objdetect 模块. 物体检测:级联分类器的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。