OpenCV 检测视频范围内有没有人
永圣智能
2024-11-15 广告
2024-11-15 广告
深圳市永圣智能设备有限公司是智能工厂ESD静电防控整体方案解决商、工业物联网及高新科技公司。服务于现代化工业4.0国家战略,实现工业4.186技术要求,满足自动化精益生产、智能制造、实时监控、 智能测试、系统集成、空气净化设备及洁净车间方案...
点击进入详情页
本回答由永圣智能提供
展开全部
这个程序代码改进一点点就可以实现检测,不过你得有摄像头,才可以,
要不让搞不定,注意的地方就是启动时候摄像头的驱动, 要取消其他的驱动设置,要不然出现错误提示。祝你成功
#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 );}
要不让搞不定,注意的地方就是启动时候摄像头的驱动, 要取消其他的驱动设置,要不然出现错误提示。祝你成功
#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训练的 , 鲁棒性不好,,,怎么办啊,,,怎么办
追答
稍微等几天,我这几天时间紧张,有时间我做一下看看,到时候把代码发给你
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询