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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人工智能 > pytorch >内容正文

pytorch

opencv 人脸检测

發(fā)布時間:2025/3/21 pytorch 79 豆豆
生活随笔 收集整理的這篇文章主要介紹了 opencv 人脸检测 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

請注意您首先要已配置好opencv環(huán)境,代碼中視頻路徑換位自己的視頻路徑。

// oc22.cpp : 定義控制臺應用程序的入口點。 //#include "stdafx.h" #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> char filename[128];//存放截取人臉的文件名char num[128];//存放要在人臉圖片中顯示的數(shù)字int count = 1;//計截取的圖片的數(shù)static CvMemStorage* storage = 0; static CvHaarClassifierCascade* cascade = 0; void detect_and_draw( IplImage* image ); const char* cascade_name = //"haarcascade_frontalface_alt.xml"; //opencv自帶的特征分類器 "D:\\opencv\\sources\\data\\haarcascades\\haarcascade_upperbody.xml"; int _tmain(int argc, _TCHAR* argv[]) {CvCapture* capture = 0; IplImage *frame, *frame_copy = 0; cascade = (CvHaarClassifierCascade*)cvLoad( cascade_name, 0, 0, 0 ); if( !cascade ) { printf("No cascade!!!!\n"); return -1; } storage = cvCreateMemStorage(0); // capture = cvCaptureFromCAM( -1);//攝像頭視頻// capture = cvCaptureFromAVI("F:\\OPENCV實驗室\\test.avi");//存好的視頻文件 capture = cvCaptureFromFile("E:\\00012.avi" );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 ) cvResize( frame, frame_copy, 1 );else cvFlip( frame, frame_copy, 0 ); detect_and_draw( frame_copy ); if( cvWaitKey( 10 ) >= 0 ) break; } cvReleaseImage( &frame_copy ); cvReleaseCapture( &capture ); } cvDestroyWindow("result"); return 0; } 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}} }; int addwid;//截取人頭像時寬度增加 20141106int addhei;//截取人頭像時高度增加 20141106double scale =1; 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; //對圖片的預處理,這里要慎重,不然可能影響人臉檢測的效果,可根據(jù)實際情況決定cvCvtColor( img, gray, CV_BGR2GRAY ); //顏色空間轉換,彩色轉灰cvResize( gray, small_img, CV_INTER_LINEAR );//重新調整圖像,CV_INTER_LINEAR是雙線性插值(默認方法) cvEqualizeHist( small_img, small_img ); //使灰度圖象直方圖均衡化//cvDilate(small_img,small_img,NULL,1);//膨脹//cvErode(small_img,small_img,NULL,1);//腐蝕//cvSmooth(small_img,small_img,CV_MEDIAN,3,0,0,0);//中值濾波cvClearMemStorage( storage ); if( cascade ) { double t = (double)cvGetTickCount(); //從操作系統(tǒng)啟動所經(jīng)過的毫秒數(shù) CvSeq* faces = cvHaarDetectObjects( small_img, cascade, storage, 1.2,2, CV_HAAR_DO_CANNY_PRUNING,cvSize(50,50) ); //找出人臉的矩形區(qū)域t = ((double)cvGetTickCount()-t); //人臉檢測的用時 printf( "detection time = %gms\n", t/((double)cvGetTickFrequency()*1000.) ); //截圖用IplImage * frame1 = cvCreateImage( cvSize(img->width,img->height), IPL_DEPTH_8U, img->nChannels );cvCopy( img, frame1, 0 );for( i = 0; i < (faces ? faces->total : 0); i++ ) { CvRect* r = (CvRect*)cvGetSeqElem( faces, i ); //截圖if(r->x*scale-10<0||r->y*scale-10<0||frame1->width<r->x*scale+r->width*scale+10||frame1->height<r->y*scale+r->height+10)//判斷截圖是否越界 20141106{cvSetImageROI(frame1, cvRect(r->x* scale,r->y* scale,r->width* scale,r->height* scale));//越界時設置源圖像ROI 20141106addwid=0;addhei=0;//越界時以獲取的矩形區(qū)域截圖 20141106}else{cvSetImageROI(frame1, cvRect(r->x* scale-10,r->y* scale-10,r->width* scale+20,r->height* scale+20));//設置源圖像ROI//frame1指向ROIaddwid=20;addhei=20;//非越界時在獲取的矩形寬和高的基礎上擴大一些 20141106}IplImage* pDest = cvCreateImage(cvSize(r->width*scale+addwid,r->height* scale+addhei),8,3);//創(chuàng)建目標圖像cvCopy(frame1,pDest,0); //復制圖像//在圖片上書寫數(shù)字sprintf(num, "%d", count);CvFont font;cvInitFont( &font, CV_FONT_VECTOR0,0.5, 1, 0,2, 8);CvSize text_size;int baseline;cvGetTextSize(num, &font, &text_size, &baseline);cvPutText(pDest, num , cvPoint(4,text_size.height+baseline), &font, CV_RGB(255,0,0));sprintf(filename, "img_%d.jpg", count++);cvSaveImage(filename,pDest);//保存目標圖像cvReleaseImage( &pDest );cvResetImageROI(frame1);//使frame1指向源圖像20141106//用圓圈出人臉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.3*scale); cvCircle( img, center, radius, colors[i%8], 2, 8, 0 ); } cvReleaseImage( &frame1 );//釋放截圖用} cvShowImage( "result", img ); cvReleaseImage( &gray ); cvReleaseImage( &small_img ); }

總結

以上是生活随笔為你收集整理的opencv 人脸检测的全部內容,希望文章能夠幫你解決所遇到的問題。

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