亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? videowin.cpp

?? 這是一個朋友做的人臉檢測軟件
?? CPP
字號:
// VideoWin.cpp : implementation file
//

#include "stdafx.h"
#include "VideoShow.h"
#include "VideoWin.h"
#include "cv.h"
#include "highgui.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CVideoWin

IplImage *image = 0, *hsv = 0, *hue = 0, *mask = 0, *backproject = 0, *histimg = 0;
CvHistogram *hist = 0;
int backproject_mode = 0;
int select_object = 0;
int track_object = 0;
int show_hist = 1;
CvPoint origin;
CvRect selection;
CvRect track_window;
CvBox2D track_box;
CvConnectedComp track_comp;
int hdims = 16;
float hranges_arr[] = {0,180};
float* hranges = hranges_arr;
int vmin = 10, vmax = 256, smin = 30;


CVideoWin::CVideoWin()
{
     //標志位初始化
	 m_State=STATE_NOVIEW;
     g_capture=0;
}

CVideoWin::~CVideoWin()
{
StopVideoPreview();
}


BEGIN_MESSAGE_MAP(CVideoWin, CStatic)
	//{{AFX_MSG_MAP(CVideoWin)
	ON_WM_TIMER()
	ON_WM_LBUTTONDOWN()
	ON_WM_LBUTTONUP()
	ON_WM_MOUSEMOVE()
	ON_WM_PAINT()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CVideoWin message handlers
//開始視頻預覽
void CVideoWin::StartVideoPreview()
{
     
	if(!g_capture)
	{
	//獲取攝像頭
    g_capture = cvCaptureFromCAM(-1);
	
	//錯誤警告
    if( !g_capture )
    {
		::AfxMessageBox("沒有找到攝像頭,請檢查驅動是否安裝正確");
        return;
    }
	 //設置標志位
     m_State=STATE_PREVIEW;

   

    //設置預覽開始
	SetTimer(1,10,NULL);	
    }
	
    else
	{
     m_State=STATE_PREVIEW;
	}

}

void CVideoWin::OnTimer(UINT nIDEvent) 
{
   //攝像頭沒有打開	
	if(!g_capture||m_State==STATE_STOP)
	return;
	/*
	switch(m_STATE)
	
	
	
	// TODO: Add your message handler code here and/or call default
     //沒有開始預覽退出
	 if(!flag_Preview||flag_Stop)
     return;
    */
	CDC *pDC=GetDC();
	//獲取一楨圖像
    g_src = cvQueryFrame( g_capture );

   
	if(g_src)
	{
	 switch(m_State)
	 {
	 case STATE_PREVIEW:
	 break;

	 case STATE_PAUSE:
     return;

	 case STATE_FACEDETECT:
		 {
         detect_and_draw(g_src);
		 break;
		 }
      case STATE_CAMSHIFT:
		  {
		    CamShif();
			break;
		  }
	  default: break;
	 }	 
	 CvvImage PreviewImage;
	//獲取對話框的大小
    RECT previewWnd;
	GetClientRect(&previewWnd);
	PreviewImage.CopyOf(g_src,-1);
	PreviewImage.DrawToHDC(pDC->m_hDC,&previewWnd);
	}
   
    
	CStatic::OnTimer(nIDEvent);
}


void CVideoWin::PauseVideoPreview()
{
//停止預覽
m_State=STATE_PAUSE; 
}

void CVideoWin::StopVideoPreview()
{
//結束預覽
if(m_State==STATE_STOP)
return;
m_State=STATE_STOP;
if(g_capture)
{
cvReleaseCapture(&g_capture);
} 
//畫背景
DrawNoviewBackGround();
}


bool CVideoWin::FaceDectectInit()
{
 //加載人臉特征庫
 const char* cascade_name =
	 "haarcascade_frontalface_alt.xml";
    // "haarcascade_profileface.xml";
 cascade = (CvHaarClassifierCascade*)cvLoad( cascade_name, 0, 0, 0 );
 if( !cascade )
 {
		 
     return false;
 }
   storage = cvCreateMemStorage(0);
   return true;
}



void CVideoWin::detect_and_draw( IplImage* img )
{
int scale = 1;
    IplImage* temp = cvCreateImage( cvSize(img->width/scale,img->height/scale), 8, 3 );
    CvPoint pt1, pt2;
    int i;

    //cvPyrDown( img, temp, CV_GAUSSIAN_5x5 );
    cvClearMemStorage( storage );

    if( cascade )
    {
        CvSeq* faces = cvHaarDetectObjects( img, cascade, storage,
                                            1.1, 2, CV_HAAR_DO_CANNY_PRUNING,
                                            cvSize(40, 40) );
        for( i = 0; i < (faces ? faces->total : 0); i++ )
        {
            CvRect* r = (CvRect*)cvGetSeqElem( faces, i );
            pt1.x = r->x*scale;
            pt2.x = (r->x+r->width)*scale;
            pt1.y = r->y*scale;
            pt2.y = (r->y+r->height)*scale;
            cvRectangle( img, pt1, pt2, CV_RGB(255,0,0), 3, 8, 0 );
        }
    }
    cvReleaseImage( &temp );
}

void CVideoWin::OnLButtonDown(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default
        if(m_State!=STATE_CAMSHIFT)
		return;

        if( !image )
        return;
        int x=point.x;
	    int y=point.y;
        if( image->origin )
        y = image->height - y;

	    origin = cvPoint(x,y);
        selection = cvRect(x,y,0,0);
        select_object = 1;
	    CStatic::OnLButtonDown(nFlags, point);
}

void CVideoWin::OnLButtonUp(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default
    if(m_State!=STATE_CAMSHIFT)
	return;
	 select_object = 0;
     if( selection.width > 0 && selection.height > 0 )
     track_object = -1;

	CStatic::OnLButtonUp(nFlags, point);
}

void CVideoWin::OnMouseMove(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default
	 if(m_State!=STATE_CAMSHIFT)
	 return;
	 if( !image )
     return;
    
     int x=point.x;
	 int y=point.y;

   
     if( image->origin )
     y = image->height - y;
  
    if( select_object )
    {
        selection.x = MIN(x,origin.x);
        selection.y = MIN(y,origin.y);
        selection.width = selection.x + CV_IABS(x - origin.x);
        selection.height = selection.y + CV_IABS(y - origin.y);
        
        selection.x = MAX( selection.x, 0 );
        selection.y = MAX( selection.y, 0 );
        selection.width = MIN( selection.width, image->width );
        selection.height = MIN( selection.height, image->height );
        selection.width -= selection.x;
        selection.height -= selection.y;
    }
	CStatic::OnMouseMove(nFlags, point);
}

CvScalar CVideoWin::hsv2rgb( float hue )
{
    int rgb[3], p, sector;
    static const int sector_data[][3]=
        {{0,2,1}, {1,2,0}, {1,0,2}, {2,0,1}, {2,1,0}, {0,1,2}};
    hue *= 0.033333333333333333333333333333333f;
    sector = cvFloor(hue);
    p = cvRound(255*(hue - sector));
    p ^= sector & 1 ? 255 : 0;

    rgb[sector_data[sector][0]] = 255;
    rgb[sector_data[sector][1]] = 0;
    rgb[sector_data[sector][2]] = p;

    return cvScalar(rgb[2], rgb[1], rgb[0],0);
}

void CVideoWin::CamShif()
{    
     IplImage* frame = 0;
     
	 frame=g_src;

     //int i, bin_w, c;
     int i, bin_w;
     if( !image )
        {
            /* allocate all the buffers */
            image = cvCreateImage( cvGetSize(frame), 8, 3 );
            image->origin = frame->origin;
            hsv = cvCreateImage( cvGetSize(frame), 8, 3 );
            hue = cvCreateImage( cvGetSize(frame), 8, 1 );
            mask = cvCreateImage( cvGetSize(frame), 8, 1 );
            backproject = cvCreateImage( cvGetSize(frame), 8, 1 );
            hist = cvCreateHist( 1, &hdims, CV_HIST_ARRAY, &hranges, 1 );
            histimg = cvCreateImage( cvSize(320,200), 8, 3 );
            cvZero( histimg );
        }

        cvCopy( frame, image, 0 );
        cvCvtColor( image, hsv, CV_BGR2HSV );

        if( track_object )
        {
            int _vmin = vmin, _vmax = vmax;

            cvInRangeS( hsv, cvScalar(0,smin,MIN(_vmin,_vmax),0),
                        cvScalar(180,256,MAX(_vmin,_vmax),0), mask );
            cvSplit( hsv, hue, 0, 0, 0 );

            if( track_object < 0 )
            {
                float max_val = 0.f;
                cvSetImageROI( hue, selection );
                cvSetImageROI( mask, selection );
                cvCalcHist( &hue, hist, 0, mask );
                cvGetMinMaxHistValue( hist, 0, &max_val, 0, 0 );
                cvConvertScale( hist->bins, hist->bins, max_val ? 255. / max_val : 0., 0 );
                cvResetImageROI( hue );
                cvResetImageROI( mask );
                track_window = selection;
                track_object = 1;

                cvZero( histimg );
                bin_w = histimg->width / hdims;
                for( i = 0; i < hdims; i++ )
                {
                    int val = cvRound( cvGetReal1D(hist->bins,i)*histimg->height/255 );
                    CvScalar color = hsv2rgb(i*180.f/hdims);
                    cvRectangle( histimg, cvPoint(i*bin_w,histimg->height),
                                 cvPoint((i+1)*bin_w,histimg->height - val),
                                 color, -1, 8, 0 );
                }
            }

            cvCalcBackProject( &hue, backproject, hist );
            cvAnd( backproject, mask, backproject, 0 );
            cvCamShift( backproject, track_window,
                        cvTermCriteria( CV_TERMCRIT_EPS | CV_TERMCRIT_ITER, 10, 1 ),
                        &track_comp, &track_box );
            track_window = track_comp.rect;
            
            if( backproject_mode )
                cvCvtColor( backproject, image, CV_GRAY2BGR );
            if( image->origin )
                track_box.angle = -track_box.angle;
            cvEllipseBox( image, track_box, CV_RGB(255,0,0), 3, CV_AA, 0 );
        }
        
        if( select_object && selection.width > 0 && selection.height > 0 )
        {
            cvSetImageROI( image, selection );
            cvXorS( image, cvScalarAll(255), image, 0 );
            cvResetImageROI( image );
        }
        
		g_src=image;
       


}
void CVideoWin::DrawNoviewBackGround()
{

    CDC *dc;
	dc=GetDC();
	
	CDC dcMem; 
	dcMem.CreateCompatibleDC(dc); 
	CBitmap bmpBackground;
	bmpBackground.LoadBitmap(IDB_VIEWBACK);
	BITMAP bitMap;
	bmpBackground.GetBitmap(&bitMap);
	CBitmap *pbmpOld=dcMem.SelectObject(&bmpBackground);
	dc->StretchBlt(0,0,bitMap.bmWidth,bitMap.bmHeight,&dcMem,0,0,bitMap.bmWidth,bitMap.bmHeight,SRCCOPY);//???
	ReleaseDC(dc);
	dcMem.SelectObject(pbmpOld);
	ReleaseDC(&dcMem);
	  

}

void CVideoWin::OnPaint() 
{
	CPaintDC dc(this); // device context for painting
	if((m_State==STATE_NOVIEW)||(m_State==STATE_STOP))
	DrawNoviewBackGround();
	else
    {
    CvvImage PreviewImage;
	RECT previewWnd;
	GetClientRect(&previewWnd);
	PreviewImage.CopyOf(g_src,-1);
	PreviewImage.DrawToHDC(dc.m_hDC,&previewWnd);
	}
	// TODO: Add your message handler code here
	
	// Do not call CStatic::OnPaint() for painting messages
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一区二区三区精品在线观看| 99久久夜色精品国产网站| 狠狠网亚洲精品| 91麻豆国产香蕉久久精品| 日韩欧美一二三四区| 亚洲女女做受ⅹxx高潮| 极品少妇一区二区| 欧美日韩国产区一| 亚洲人成网站影音先锋播放| 国内偷窥港台综合视频在线播放| 欧美午夜电影网| 中文一区二区完整视频在线观看| 免费一级欧美片在线观看| 色综合久久中文综合久久牛| 欧美国产日本视频| 国产在线视频一区二区| 538prom精品视频线放| 亚洲欧美成人一区二区三区| 成人网在线播放| 精品久久国产字幕高潮| 午夜精品久久久久久久蜜桃app| 91丨九色porny丨蝌蚪| 久久久精品国产99久久精品芒果| 奇米精品一区二区三区四区 | 欧美在线看片a免费观看| 久久精品一区二区三区不卡牛牛| 免费成人在线观看| 717成人午夜免费福利电影| 亚洲国产裸拍裸体视频在线观看乱了| 成人美女在线观看| 国产精品美女久久久久久久网站| 国产精品自拍在线| 亚洲国产高清不卡| 风间由美中文字幕在线看视频国产欧美| 日韩一区国产二区欧美三区| 免费在线成人网| 欧美v日韩v国产v| 久久精品国产精品亚洲综合| 精品久久久三级丝袜| 狠狠狠色丁香婷婷综合久久五月| 91麻豆精品国产自产在线观看一区 | 欧美在线|欧美| 亚洲一区二区三区中文字幕| 在线视频欧美区| 亚洲bt欧美bt精品| 日韩午夜激情视频| 国产精品影视在线观看| 中文av一区特黄| 99视频超级精品| 亚洲图片欧美一区| 欧美一区二区视频网站| 久久国产人妖系列| 日本一区二区三区视频视频| 91蝌蚪porny| 日日夜夜免费精品视频| 精品三级在线观看| 不卡视频在线看| 亚洲成人动漫av| 久久嫩草精品久久久久| 91久久香蕉国产日韩欧美9色| 亚洲风情在线资源站| 精品国产髙清在线看国产毛片| 国产**成人网毛片九色 | 国产精品人成在线观看免费| 91麻豆产精品久久久久久| 亚洲午夜激情网站| 亚洲精品一区在线观看| 一本一道久久a久久精品综合蜜臀| 午夜一区二区三区视频| 国产喷白浆一区二区三区| 欧美在线一区二区| 国产福利一区二区三区| 亚洲成人av一区二区三区| 国产情人综合久久777777| 欧美日韩精品三区| 成人夜色视频网站在线观看| 婷婷丁香激情综合| 中文字幕一区三区| 欧美大片顶级少妇| 在线观看亚洲精品| 国产精选一区二区三区| 丝袜美腿亚洲一区| 亚洲欧美综合在线精品| 欧美一区二区三区男人的天堂| 成人黄色小视频在线观看| 精品一区二区三区久久| 午夜影视日本亚洲欧洲精品| 国产精品欧美一区二区三区| 日韩一区二区三| 欧美视频在线一区| 91同城在线观看| 国产黄色精品视频| 久久精品国产77777蜜臀| 亚洲精品视频在线观看网站| 国产蜜臀97一区二区三区 | 久久精品国产99国产精品| 亚洲午夜视频在线观看| 日本一区二区三区高清不卡| 日韩视频中午一区| 欧美综合天天夜夜久久| 99精品久久久久久| 国产一区二区三区电影在线观看| 婷婷六月综合亚洲| 亚洲香肠在线观看| 亚洲一区二区三区四区在线免费观看 | 亚洲色图一区二区三区| 国产精品久线在线观看| 久久久久国色av免费看影院| 精品国产不卡一区二区三区| 欧美一二三在线| 日韩三级.com| 欧美电影免费观看高清完整版在线观看| 欧美日韩你懂得| 欧美日韩精品综合在线| 欧美精品18+| 日韩限制级电影在线观看| 日韩欧美一区中文| 欧美大白屁股肥臀xxxxxx| 日韩一区二区三区视频| 日韩欧美国产电影| 日韩精品一区二区三区视频播放| 日韩午夜av电影| 久久日一线二线三线suv| 久久综合av免费| 亚洲国产成人在线| 亚洲免费av高清| 一级特黄大欧美久久久| 亚洲成av人片一区二区梦乃| 日韩黄色片在线观看| 久久99在线观看| 国产a区久久久| 91片黄在线观看| 欧美日韩一卡二卡| 日韩精品一区二区三区中文精品| 久久久另类综合| 亚洲欧美综合色| 亚洲国产成人91porn| 蜜桃av一区二区三区| 国产精品中文字幕一区二区三区| 懂色中文一区二区在线播放| 91丨porny丨蝌蚪视频| 欧美日韩精品一区二区三区| 精品少妇一区二区三区日产乱码| 久久久久久久久久久久电影| 国产精品久久久久久久岛一牛影视 | www.欧美色图| 欧美中文字幕一区二区三区| 欧美一区二区三区色| 国产精品网站导航| 亚洲大片在线观看| 韩国欧美一区二区| 91在线云播放| 日韩视频免费观看高清在线视频| 久久精品一区二区| 午夜一区二区三区视频| 国产高清不卡一区| 欧美日韩久久不卡| 国产精品欧美一级免费| 日韩国产欧美视频| av一本久道久久综合久久鬼色| 欧美日韩视频不卡| 中文字幕巨乱亚洲| 日韩电影一区二区三区四区| 成人午夜视频在线| 日韩欧美精品在线| 樱桃国产成人精品视频| 国产一区二区三区精品视频| 欧美亚洲高清一区| 欧美国产精品一区二区| 免费三级欧美电影| 色av成人天堂桃色av| 欧美激情艳妇裸体舞| 免费在线观看精品| 欧美色偷偷大香| 日韩毛片高清在线播放| 国精产品一区一区三区mba桃花 | 色狠狠综合天天综合综合| 2020国产精品| 美女久久久精品| 欧美日韩不卡视频| 亚洲综合在线视频| www.欧美.com| 国产精品嫩草影院av蜜臀| 久久www免费人成看片高清| 欧美影视一区二区三区| 亚洲欧美一区二区在线观看| 国产综合久久久久影院| 日韩视频在线你懂得| 日本怡春院一区二区| 欧美无砖专区一中文字| 亚洲你懂的在线视频| 成人精品免费网站| 亚洲国产精品激情在线观看| 久久99精品国产麻豆不卡| 91精品国产综合久久久久久| 亚洲高清免费观看| 欧美在线免费视屏| 亚洲国产日韩一级| 欧美三电影在线| 亚洲国产综合色|