
git-svn-id: https://free-cad.svn.sourceforge.net/svnroot/free-cad/trunk@5000 e8eeb9e2-ec13-0410-a4a9-efa5cf37419d
148 lines
4.3 KiB
C++
148 lines
4.3 KiB
C++
/***************************************************************************
|
|
* Copyright (c) Jürgen Riegel (juergen.riegel@web.de) 2007 *
|
|
* *
|
|
* This file is part of the FreeCAD CAx development system. *
|
|
* *
|
|
* This library is free software; you can redistribute it and/or *
|
|
* modify it under the terms of the GNU Library General Public *
|
|
* License as published by the Free Software Foundation; either *
|
|
* version 2 of the License, or (at your option) any later version. *
|
|
* *
|
|
* This library is distributed in the hope that it will be useful, *
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
|
* GNU Library General Public License for more details. *
|
|
* *
|
|
* You should have received a copy of the GNU Library General Public *
|
|
* License along with this library; see the file COPYING.LIB. If not, *
|
|
* write to the Free Software Foundation, Inc., 59 Temple Place, *
|
|
* Suite 330, Boston, MA 02111-1307, USA *
|
|
* *
|
|
***************************************************************************/
|
|
|
|
|
|
#include "PreCompiled.h"
|
|
#ifndef _PreComp_
|
|
# include <stdio.h>
|
|
#endif
|
|
|
|
#include "CaptureClass.h"
|
|
|
|
#ifdef _MSC_VER // this file is not available on Linux
|
|
//# include <cvcam.h>
|
|
#endif
|
|
//---------------------------------------------------------------------------
|
|
|
|
|
|
/// Constructor with an Capture number, 0 will ask for one
|
|
Capturerer::Capturerer(int num)
|
|
: capture(NULL),captureImage(0),_bIsWinOn(false)
|
|
{
|
|
capture = cvCaptureFromCAM( num );
|
|
|
|
if( !capture )
|
|
throw "Cant create capture device";
|
|
|
|
hScale=0.5;
|
|
vScale=0.5;
|
|
lineWidth=1;
|
|
useLabel=true;
|
|
|
|
// Init font
|
|
cvInitFont(&font,CV_FONT_HERSHEY_SIMPLEX/*|CV_FONT_ITALIC*/, hScale,vScale,0,lineWidth);
|
|
|
|
|
|
}
|
|
/// Constructor with an File name. Object will capture from that Video file
|
|
Capturerer::Capturerer(const char* fileName)
|
|
: capture(NULL), captureImage(0),_bIsWinOn(false)
|
|
{
|
|
capture = cvCaptureFromAVI( fileName );
|
|
|
|
if( !capture )
|
|
throw "Cant create capture device";
|
|
|
|
}
|
|
|
|
int Capturerer::chooseCamNum(void)
|
|
{
|
|
#if 0
|
|
int ncams = cvcamGetCamerasCount( );//returns the number of available cameras in the system
|
|
//printf("Number of Cams: %d\n",ncams);
|
|
int* out;
|
|
if(ncams >1){
|
|
int nselected = cvcamSelectCamera(&out);
|
|
if(nselected>0)
|
|
printf("the 1-st selected camera is camera number %d", out[0]);
|
|
if(nselected == 2)
|
|
printf("the 2-nd selected camera is camera number %d", out[1]);
|
|
}else if (ncams < 1){
|
|
printf("No camara in system! Terminating.\n");
|
|
return -1;
|
|
}else
|
|
out = new int(0);
|
|
|
|
return *out;
|
|
#else
|
|
//FIXME: cvcamGetCamerasCount is not available on Linux
|
|
return -1;
|
|
#endif
|
|
}
|
|
|
|
Capturerer::~Capturerer()
|
|
{
|
|
if(_bIsWinOn)
|
|
cvDestroyWindow("Capture");
|
|
if(capture)
|
|
cvReleaseCapture(&capture);
|
|
}
|
|
|
|
|
|
void Capturerer::setCaptureWindows(bool On)
|
|
{
|
|
if(!_bIsWinOn && On)
|
|
{
|
|
cvNamedWindow( "Capture", 0 );
|
|
_bIsWinOn = true;
|
|
}
|
|
if(_bIsWinOn && !On)
|
|
{
|
|
cvDestroyWindow("Capture");
|
|
_bIsWinOn = false;
|
|
}
|
|
}
|
|
|
|
|
|
char Capturerer::getOneCapture(const char *text)
|
|
{
|
|
//static int i = 0;
|
|
// Get frame
|
|
IplImage* frame = NULL;
|
|
frame = cvQueryFrame( capture );
|
|
|
|
if( !frame )
|
|
throw "Cannot get frame";
|
|
|
|
if(! captureImage)
|
|
size = cvGetSize(frame);
|
|
captureImage = cvCreateImage( size, 8, 3 );
|
|
|
|
// copy memory frame to image
|
|
cvCopy( frame, captureImage, 0 );
|
|
|
|
// Flip
|
|
cvFlip(captureImage, captureImage);
|
|
|
|
// label
|
|
if (text)
|
|
cvPutText (captureImage,text, cvPoint(0,size.height - 5) , &font, cvScalar(0,255,0));
|
|
|
|
|
|
if(_bIsWinOn)
|
|
cvShowImage( "Capture", captureImage );
|
|
|
|
return cvWaitKey(1);
|
|
|
|
}
|
|
|