首页 » 技术分享 » 调用USB摄像头,实时进行HOG人体识别

调用USB摄像头,实时进行HOG人体识别

 

网上找到了一款人体识别的代码。

环境:在XP、VS2010、OpenCV3.1.0

硬件:CPU是 Intel Core 2 DUo CPU E7300 @2.66GHz。2G内存。USB摄像头

一卡一卡的。不过只是用于人员闯入,并提示。打算将这个程序打包成函数,直接用了。

 


/// this is a copy from http://www.magicandlove.com/blog/2011/08/26/people-detection-in-opencv-again/

#include <iostream>
#include <opencv2/opencv.hpp>
 
using namespace std;
using namespace cv;
 
int main (int argc, const char * argv[])
{
    VideoCapture cap(CV_CAP_ANY);
    cap.set(CV_CAP_PROP_FRAME_WIDTH, 320);
    cap.set(CV_CAP_PROP_FRAME_HEIGHT, 240);    
    if (!cap.isOpened())
        return -1;
 
    Mat img;
    HOGDescriptor hog;
    hog.setSVMDetector(HOGDescriptor::getDefaultPeopleDetector());
 
    namedWindow("video capture", CV_WINDOW_AUTOSIZE);
    while (true)
    {
        cap >> img;
        if (!img.data)
            continue;
 
        vector<Rect> found, found_filtered;
        hog.detectMultiScale(img, found, 0, Size(8,8), Size(32,32), 1.05, 2);
 
        size_t i, j;
        for (i=0; i<found.size(); i++)
        {
            Rect r = found[i];
            for (j=0; j<found.size(); j++)
                if (j!=i && (r & found[j])==r)
                    break;
            if (j==found.size())
                found_filtered.push_back(r);
        }
        for (i=0; i<found_filtered.size(); i++)
        {
	    Rect r = found_filtered[i];
            r.x += cvRound(r.width*0.1);
	    r.width = cvRound(r.width*0.8);
	    r.y += cvRound(r.height*0.06);
	    r.height = cvRound(r.height*0.9);
	    rectangle(img, r.tl(), r.br(), cv::Scalar(0,255,0), 2);
	}
        imshow("video capture", img);
        if (waitKey(20) >= 0)
            break;
    }
    return 0;
}

 

转载自原文链接, 如需删除请联系管理员。

原文链接:调用USB摄像头,实时进行HOG人体识别,转载请注明来源!

0