OpenCV 检测视频范围内有没有人

只要监视摄像头范围内有没有人就可以,其他都不要,该怎么做,有没有例子什么的... 只要监视摄像头范围内有没有人就可以,其他都不要,该怎么做,有没有例子什么的 展开
 我来答
落实思树者
2012-07-06 · TA获得超过990个赞
知道小有建树答主
回答量:213
采纳率:100%
帮助的人:163万
展开全部
你这个要看凯祥环燃银境怎么样的,opencv提供了人脸检测和行人检测,如果摄像头离人比较近,人脸检测的效果会好一点,如果比较远可以得到人的全身图像,就需要行人检测了,人脸检测比较容易,用的是haarcascade方法,楼皮孙宴上的答案就是,行人检测也可以用haarcascade,但是效果一般,比较好的是用HOG,网上仔细找找也有代码的。
苏州千视通视觉科技股份有限公司_
2024-11-04 广告
千视通是国内第一梯队推出多模态AI大模型网关和边缘大模型一体机产品方案的领先AI企业。 拥有行业领先的多模态视觉语言大模型技术,践行“Make high-quality AI quickly”理念,平台基于多模态预训练,支持用户自定义算法可... 点击进入详情页
本回答由苏州千视通视觉科技股份有限公司_提供
机械狂人dong
2012-06-28
知道答主
回答量:16
采纳率:0%
帮助的人:8.9万
展开全部
这个程序代码改进一点点就可以实简激现检测嫌咐敏,不过你得有摄像头,才可以,
要不让搞不定,注意的地方就是启动时候摄像头的驱动, 要取消其他的驱动设置,要不然出现错误提示。祝你成功

#include "cv.h"
#include "highgui.h"#include <stdio.h>#include <stdlib.h>#include <string.h>#include <assert.h>#include <math.h>#include <float.h>#include <limits.h>#include <time.h>#include <ctype.h>#ifdef _EiC#define WIN32#endifstatic CvMemStorage* storage =0;static CvHaarClassifierCascade* cascade =0;void detect_and_draw( IplImage* image );constchar* cascade_name = "haarcascade_frontalface_alt.xml";/* "haarcascade_profileface.xml";*/int main(int argc,char** argv ){ CvCapture* capture =0; IplImage *frame,*frame_copy =0; int optlen = strlen("--cascade="); constchar* input_name; if( argc >1&& strncmp( argv[1],"--cascade=", optlen )==0) { cascade_name = argv[1]+ optlen; input_name = argc >2? argv[2]:0; } else { cascade_name ="../../data/haarcascades/haarcascade_frontalface_alt2.xml"; //opencv装好后haarcascade_frontalface_alt2.xml的路径, //也可以把这个文件拷到你的工程文件芹枝夹下然后不用写路径名cascade_name= "haarcascade_frontalface_alt2.xml"; //或者cascade_name ="C:\\Program Files\\OpenCV\\data\\haarcascades\\haarcascade_frontalface_alt2.xml" input_name = argc >1? argv[1]:0; } cascade =(CvHaarClassifierCascade*)cvLoad( cascade_name,0,0,0); if(!cascade ) { fprintf( stderr,"ERROR: Could not load classifier cascade\n"); fprintf( stderr, "Usage: facedetect --cascade=\"<cascade_path>\" [filename|camera_index]\n"); return-1; } storage = cvCreateMemStorage(0); if(!input_name ||(isdigit(input_name[0])&& input_name[1]=='\0')) capture = cvCaptureFromCAM(!input_name ?0: input_name[0]-'0'); else capture = cvCaptureFromAVI( input_name ); cvNamedWindow("result",1); if( capture ) { for(;;) { if(!cvGrabFrame( capture )) break; frame = cvRetrieveFrame( capture ); if(!frame ) break; if(!frame_copy ) frame_copy = cvCreateImage( cvSize(frame->width,frame->height), IPL_DEPTH_8U, frame->nChannels ); if( frame->origin == IPL_ORIGIN_TL ) cvCopy( frame, frame_copy,0); else cvFlip( frame, frame_copy,0); detect_and_draw( frame_copy ); if( cvWaitKey(10)>=0) break; } cvReleaseImage(&frame_copy ); cvReleaseCapture(&capture ); } else { constchar* filename = input_name ? input_name :(char*)"lena.jpg"; IplImage* image = cvLoadImage( filename,1); if( image ) { detect_and_draw( image ); cvWaitKey(0); cvReleaseImage(&image ); } else { /* assume it is a text file containing the list of the image filenames to be processed - one per line */ FILE* f = fopen( filename,"rt"); if( f ) { char buf[1000+1]; while( fgets( buf,1000, f )) { int len =(int)strlen(buf); while( len >0&& isspace(buf[len-1])) len--; buf[len]='\0'; image = cvLoadImage( buf,1); if( image ) { detect_and_draw( image ); cvWaitKey(0); cvReleaseImage(&image ); } } fclose(f); } } } cvDestroyWindow("result"); return0;}void detect_and_draw( IplImage* img ){ static CvScalar colors[]= { {{0,0,255}}, {{0,128,255}}, {{0,255,255}}, {{0,255,0}}, {{255,128,0}}, {{255,255,0}}, {{255,0,0}}, {{255,0,255}} }; double scale =1.3; IplImage* gray = cvCreateImage( cvSize(img->width,img->height),8,1); IplImage* small_img = cvCreateImage( cvSize( cvRound (img->width/scale), cvRound (img->height/scale)), 8,1); int i; cvCvtColor( img, gray, CV_BGR2GRAY ); cvResize( gray, small_img, CV_INTER_LINEAR ); cvEqualizeHist( small_img, small_img ); cvClearMemStorage( storage ); if( cascade ) { double t =(double)cvGetTickCount(); CvSeq* faces = cvHaarDetectObjects( small_img, cascade, storage, 1.1,2,0/*CV_HAAR_DO_CANNY_PRUNING*/, cvSize(30,30)); t =(double)cvGetTickCount()- t; printf("detection time = %gms\n", t/((double)cvGetTickFrequency()*1000.)); for( i =0; i <(faces ? faces->total :0); i++) { CvRect* r =(CvRect*)cvGetSeqElem( faces, i ); CvPoint center; int radius; center.x= cvRound((r->x + r->width*0.5)*scale); center.y= cvRound((r->y + r->height*0.5)*scale); radius = cvRound((r->width + r->height)*0.25*scale); cvCircle( img, center, radius, colors[i%8],3,8,0); } } cvShowImage("result", img ); cvReleaseImage(&gray ); cvReleaseImage(&small_img );}
追问
这个我看过了,opencv的例子,是用的adaboost训练的 , 鲁棒性不好,,,怎么办啊,,,怎么办
追答
稍微等几天,我这几天时间紧张,有时间我做一下看看,到时候把代码发给你
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式