#include <mitkOpenCVVideoSource.h>
Public Types | |
typedef OpenCVVideoSource | Self |
typedef itk::Object | Superclass |
typedef itk::SmartPointer< Self > | Pointer |
typedef itk::SmartPointer < const Self > | ConstPointer |
Public Member Functions | |
virtual const char * | GetClassName () const |
virtual void | SetVideoFileInput (const char *filename, bool repeatVideo, bool useCVCAMLib=false) |
virtual void | SetVideoCameraInput (int cameraindex, bool useCVCAMLib=false) |
virtual double | GetVideoCaptureProperty (int property_id) |
virtual int | SetVideoCaptureProperty (int property_id, double value) |
virtual void | GetCurrentFrameAsOpenCVImage (IplImage *image) |
const IplImage * | GetImage () |
const IplImage * | GetCurrentFrame () |
virtual void | GetCurrentFrameAsItkHSVPixelImage (HSVPixelImageType::Pointer &Image) |
virtual void | FetchFrame () |
virtual unsigned char * | GetVideoTexture () |
virtual void | StartCapturing () |
virtual void | StopCapturing () |
virtual IplImage * | RotateImage (IplImage *input) |
virtual void | EnableOnlineImageUndistortion (mitk::Point3D focal, mitk::Point3D principal, mitk::Point4D distortion) |
virtual void | DisableOnlineImageUndistortion () |
virtual bool | OnlineImageUndistortionEnabled () const |
virtual void | PauseCapturing () |
virtual bool | GetCapturePaused () const |
virtual std::string | GetVideoFileName () const |
virtual short | GetGrabbingDeviceNumber () const |
virtual bool | GetRepeatVideo () |
virtual void | SetRepeatVideo (bool _arg) |
Static Public Member Functions | |
static Pointer | New () |
Protected Member Functions | |
OpenCVVideoSource () | |
virtual | ~OpenCVVideoSource () |
void | Reset () |
void | UpdateVideoTexture () |
void | sleep (unsigned int ms) |
void | RGBtoHSV (float r, float g, float b, float &h, float &s, float &v) |
Protected Attributes | |
CvCapture * | m_VideoCapture |
IplImage * | m_CurrentImage |
unsigned char * | m_CurrentVideoTexture |
IplImage * | m_PauseImage |
bool | m_CapturePaused |
std::string | m_VideoFileName |
short | m_GrabbingDeviceNumber |
bool | m_RepeatVideo |
bool | m_UseCVCAMLib |
bool | m_UndistortImage |
mitk::UndistortCameraImage::Pointer | m_UndistortCameraImage |
Interface for acquiring video data using Intel's OPENCV library. Video data may either be provided from a file or a grabbing device. At the moment, OPENCV includes two separated modules for this grabbing, but only HighGui is used here. Initialize via SetVideoFileInput() or SetVideoCameraInput(), start processing with StartCapturing();
Definition at line 44 of file mitkOpenCVVideoSource.h.
typedef itk::SmartPointer<const Self> mitk::OpenCVVideoSource::ConstPointer |
Reimplemented from mitk::VideoSource.
Definition at line 55 of file mitkOpenCVVideoSource.h.
typedef itk::SmartPointer<Self> mitk::OpenCVVideoSource::Pointer |
Reimplemented from mitk::VideoSource.
Definition at line 55 of file mitkOpenCVVideoSource.h.
Reimplemented from mitk::VideoSource.
Definition at line 55 of file mitkOpenCVVideoSource.h.
typedef itk::Object mitk::OpenCVVideoSource::Superclass |
Reimplemented from mitk::VideoSource.
Definition at line 55 of file mitkOpenCVVideoSource.h.
mitk::OpenCVVideoSource::OpenCVVideoSource | ( | ) | [protected] |
Definition at line 22 of file mitkOpenCVVideoSource.cpp.
: m_VideoCapture(0), m_CurrentImage(0), m_CurrentVideoTexture(0), m_PauseImage(0), m_CapturePaused(false), m_GrabbingDeviceNumber(-1), m_RepeatVideo(false), m_UseCVCAMLib(false), m_UndistortImage(false) { }
mitk::OpenCVVideoSource::~OpenCVVideoSource | ( | ) | [protected, virtual] |
Definition at line 35 of file mitkOpenCVVideoSource.cpp.
{ this->Reset(); }
void mitk::OpenCVVideoSource::DisableOnlineImageUndistortion | ( | ) | [virtual] |
Definition at line 261 of file mitkOpenCVVideoSource.cpp.
{ m_UndistortImage = false; }
void mitk::OpenCVVideoSource::EnableOnlineImageUndistortion | ( | mitk::Point3D | focal, |
mitk::Point3D | principal, | ||
mitk::Point4D | distortion | ||
) | [virtual] |
Definition at line 247 of file mitkOpenCVVideoSource.cpp.
References mitk::UndistortCameraImage::New().
{ // Initialize Undistortion m_UndistortImage = true; float kc[4]; kc[0] = distortion[0]; kc[1] = distortion[1]; kc[2] = distortion[2]; kc[3] = distortion[3]; if(m_CaptureWidth == 0 || m_CaptureHeight == 0) FetchFrame(); m_UndistortCameraImage = mitk::UndistortCameraImage::New(); m_UndistortCameraImage->SetUndistortImageFastInfo(focal[0], focal[1], principal[0], principal[1], kc, (float)m_CaptureWidth, (float)m_CaptureHeight); }
void mitk::OpenCVVideoSource::FetchFrame | ( | ) | [virtual] |
Reimplemented from mitk::VideoSource.
Definition at line 125 of file mitkOpenCVVideoSource.cpp.
References MITK_DEBUG.
{ // main procedure for updating video data if(m_CapturingInProcess) { if(m_VideoCapture) // we use highgui { if(!m_CapturePaused) { // release old image here m_CurrentImage = cvQueryFrame(m_VideoCapture); ++m_FrameCount; } if(m_CurrentImage == NULL) // do we need to repeat the video if it is from video file? { double framePos = this->GetVideoCaptureProperty(CV_CAP_PROP_POS_AVI_RATIO); MITK_DEBUG << "End of video file found. framePos: " << framePos; if(m_RepeatVideo && framePos >= 0.99) { MITK_DEBUG << "Restarting video file playback."; this->SetVideoCaptureProperty(CV_CAP_PROP_POS_AVI_RATIO, 0); m_CurrentImage = cvQueryFrame(m_VideoCapture); } } if(m_CaptureWidth == 0 || m_CaptureHeight == 0) { MITK_DEBUG << "Trying to set m_CaptureWidth & m_CaptureHeight."; m_CaptureWidth = m_CurrentImage->width; m_CaptureHeight = m_CurrentImage->height; std::cout << "frame width: " << m_CaptureWidth << ", height: " << m_CaptureHeight << std::endl; m_CurrentImage->origin = 0; } } } }
virtual bool mitk::OpenCVVideoSource::GetCapturePaused | ( | ) | const [virtual] |
virtual const char* mitk::OpenCVVideoSource::GetClassName | ( | ) | const [virtual] |
Reimplemented from mitk::VideoSource.
const IplImage * mitk::OpenCVVideoSource::GetCurrentFrame | ( | ) |
Definition at line 108 of file mitkOpenCVVideoSource.cpp.
Referenced by QmitkOpenCVVideoControls::NewFrameAvailable().
{ return m_CurrentImage; }
void mitk::OpenCVVideoSource::GetCurrentFrameAsItkHSVPixelImage | ( | HSVPixelImageType::Pointer & | Image ) | [virtual] |
Definition at line 267 of file mitkOpenCVVideoSource.cpp.
{ FetchFrame(); // Prepare iteration HSVConstIteratorType itImage( Image, Image->GetLargestPossibleRegion()); itImage.Begin(); HSVPixelType pixel; int rowsize = 3 * m_CaptureWidth; char* bufferend; char* picture; picture = this->m_CurrentImage->imageData; bufferend = this->m_CurrentImage->imageData + 3*(m_CaptureHeight*m_CaptureWidth); float r,g,b,h,s,v; try { // we have to flip the image for(char* datapointer = bufferend - rowsize;datapointer >= picture; datapointer -= rowsize) { for(char* current = datapointer; current < datapointer + rowsize; current++) { b = *current; current++; g = *current; current++; r = *current; RGBtoHSV(r,g,b,h,s,v); pixel[0] = h; pixel[1] = s; pixel[2] = v; itImage.Set(pixel); ++itImage; } } } catch( ... ) { std::cout << "Exception raised mitkOpenCVVideoSource: get hsv itk image conversion error." << std::endl; } }
void mitk::OpenCVVideoSource::GetCurrentFrameAsOpenCVImage | ( | IplImage * | image ) | [virtual] |
Definition at line 113 of file mitkOpenCVVideoSource.cpp.
{ // get last captured frame for processing the image data if(m_CurrentImage) { if(image) { image->origin = m_CurrentImage->origin; memcpy(image->imageData,m_CurrentImage->imageData,m_CurrentImage->width*m_CurrentImage->height*m_CurrentImage->nChannels); } } }
virtual short mitk::OpenCVVideoSource::GetGrabbingDeviceNumber | ( | ) | const [virtual] |
Returns the GrabbingDeviceNumber (maybe -1 if a video file is used)
Referenced by QmitkOpenCVVideoControls::SetVideoBackground().
const IplImage * mitk::OpenCVVideoSource::GetImage | ( | void | ) | [virtual] |
Return the current frame
Implements mitk::OpenCVImageSource.
Definition at line 103 of file mitkOpenCVVideoSource.cpp.
{ return m_CurrentImage; }
virtual bool mitk::OpenCVVideoSource::GetRepeatVideo | ( | ) | [virtual] |
double mitk::OpenCVVideoSource::GetVideoCaptureProperty | ( | int | property_id ) | [virtual] |
Definition at line 66 of file mitkOpenCVVideoSource.cpp.
Referenced by QmitkOpenCVVideoControls::NewFrameAvailable(), and QmitkOpenCVVideoControls::on_VideoProgressSlider_sliderPressed().
{ return cvGetCaptureProperty(m_VideoCapture, property_id); }
virtual std::string mitk::OpenCVVideoSource::GetVideoFileName | ( | ) | const [virtual] |
Returns the video file name (maybe empty if a grabbing device is used)
Referenced by QmitkOpenCVVideoControls::SetVideoBackground().
unsigned char * mitk::OpenCVVideoSource::GetVideoTexture | ( | ) | [virtual] |
Reimplemented from mitk::VideoSource.
Definition at line 77 of file mitkOpenCVVideoSource.cpp.
{ // Fetch Frame and return pointer to opengl texture FetchFrame(); if (m_RotationEnabled) { //store pointer to release memory for the image after rotation IplImage * tmpImage = m_CurrentImage; //rotate the image to get a static video m_CurrentImage = this->RotateImage(m_CurrentImage); // release memory cvReleaseImage(&tmpImage); // } //transfer the image to a texture this->UpdateVideoTexture(); return this->m_CurrentVideoTexture; this->Modified(); }
static Pointer mitk::OpenCVVideoSource::New | ( | ) | [static] |
Reimplemented from mitk::VideoSource.
Referenced by QmitkVideoPlayer::CreateQtPartControl().
bool mitk::OpenCVVideoSource::OnlineImageUndistortionEnabled | ( | ) | const [virtual] |
Definition at line 220 of file mitkOpenCVVideoSource.cpp.
{ return m_UndistortCameraImage; }
void mitk::OpenCVVideoSource::PauseCapturing | ( | ) | [virtual] |
Definition at line 225 of file mitkOpenCVVideoSource.cpp.
Referenced by QmitkOpenCVVideoControls::on_PlayButton_clicked(), QmitkOpenCVVideoControls::on_VideoProgressSlider_sliderPressed(), and QmitkOpenCVVideoControls::on_VideoProgressSlider_sliderReleased().
{ m_CapturePaused = !m_CapturePaused; if(m_CapturePaused) { m_PauseImage = cvCloneImage(m_CurrentImage); // undistort this pause image if necessary if(m_UndistortImage) m_UndistortCameraImage->UndistortImageFast(m_PauseImage, 0); m_CurrentImage = m_PauseImage; } else { cvReleaseImage( &m_PauseImage ); // release old pause image if necessary m_CurrentImage = 0; m_PauseImage = 0; } }
void mitk::OpenCVVideoSource::Reset | ( | ) | [protected] |
Resets the whole class for capturing from a new device
Definition at line 383 of file mitkOpenCVVideoSource.cpp.
{ // set capturing to false this->StopCapturing(); if(m_VideoCapture) cvReleaseCapture(&m_VideoCapture); m_VideoCapture = 0; m_CurrentImage = 0; m_CaptureWidth = 0; m_CaptureHeight = 0; delete m_CurrentVideoTexture; m_CurrentVideoTexture = 0; if(m_PauseImage) cvReleaseImage(&m_PauseImage); m_PauseImage = 0; m_CapturePaused = false; m_VideoFileName.clear(); m_GrabbingDeviceNumber = -1; // do not touch repeat video //m_RepeatVideo = false; m_UseCVCAMLib = false; // do not touch undistort settings // bool m_UndistortImage; }
void mitk::OpenCVVideoSource::RGBtoHSV | ( | float | r, |
float | g, | ||
float | b, | ||
float & | h, | ||
float & | s, | ||
float & | v | ||
) | [protected] |
Definition at line 311 of file mitkOpenCVVideoSource.cpp.
{ if(r > 1.0) r = r/255; if(b > 1.0) b = b/255; if(g > 1.0) g = g/255; float mn=r,mx=r; int maxVal=0; if (g > mx){ mx=g;maxVal=1;} if (b > mx){ mx=b;maxVal=2;} if (g < mn) mn=g; if (b < mn) mn=b; float delta = mx - mn; v = mx; if( mx != 0 ) s = delta / mx; else { s = 0; h = 0; return; } if (s==0.0f) { h=-1; return; } else { switch (maxVal) { case 0:{h = ( g - b ) / delta;break;} // yel < h < mag case 1:{h = 2 + ( b - r ) / delta;break;} // cyan < h < yel case 2:{h = 4 + ( r - g ) / delta;break;} // mag < h < cyan } } h *= 60; if( h < 0 ) h += 360; }
IplImage * mitk::OpenCVVideoSource::RotateImage | ( | IplImage * | input ) | [virtual] |
Definition at line 362 of file mitkOpenCVVideoSource.cpp.
{ if(input == NULL) { //warn the user and quit std::cout<<"openCVVideoSource: Current video image is null! "<< std::endl; return input; } IplImage* dst = cvCloneImage( input ); double angle = this->GetRotationAngle(); //degree CvPoint2D32f centre; CvMat *translate = cvCreateMat(2, 3, CV_32FC1); cvSetZero(translate); centre.x = m_CaptureWidth/2; centre.y = m_CaptureHeight/2; cv2DRotationMatrix(centre, angle, 1.0, translate); cvWarpAffine(input, dst, translate,CV_INTER_LINEAR + CV_WARP_FILL_OUTLIERS , cvScalarAll(0)); cvReleaseMat(&translate); return dst; }
virtual void mitk::OpenCVVideoSource::SetRepeatVideo | ( | bool | _arg ) | [virtual] |
void mitk::OpenCVVideoSource::SetVideoCameraInput | ( | int | cameraindex, |
bool | useCVCAMLib = false |
||
) | [virtual] |
Definition at line 54 of file mitkOpenCVVideoSource.cpp.
References MITK_ERROR.
Referenced by QmitkOpenCVVideoControls::on_PlayButton_clicked().
{ this->Reset(); m_GrabbingDeviceNumber = cameraindex; m_VideoCapture = cvCaptureFromCAM(m_GrabbingDeviceNumber); if(!m_VideoCapture) MITK_ERROR << "Error in initializing CVHighGUI video camera!"<< std::endl; this->Modified(); }
int mitk::OpenCVVideoSource::SetVideoCaptureProperty | ( | int | property_id, |
double | value | ||
) | [virtual] |
Definition at line 71 of file mitkOpenCVVideoSource.cpp.
Referenced by QmitkOpenCVVideoControls::on_VideoProgressSlider_sliderReleased().
{ return cvSetCaptureProperty(m_VideoCapture, property_id, value); }
void mitk::OpenCVVideoSource::SetVideoFileInput | ( | const char * | filename, |
bool | repeatVideo, | ||
bool | useCVCAMLib = false |
||
) | [virtual] |
Definition at line 40 of file mitkOpenCVVideoSource.cpp.
References MITK_WARN.
Referenced by QmitkOpenCVVideoControls::on_PlayButton_clicked().
{ this->Reset(); m_VideoFileName = filename; m_VideoCapture = cvCaptureFromFile(filename); if(!m_VideoCapture) MITK_WARN << "Error in initializing video file input!"; m_RepeatVideo = repeatVideo; //m_CurrentImage = cvCreateImage(cvSize(m_CaptureWidth,m_CaptureHeight),8,3); this->Modified(); }
void mitk::OpenCVVideoSource::sleep | ( | unsigned int | ms ) | [protected] |
void mitk::OpenCVVideoSource::StartCapturing | ( | ) | [virtual] |
Reimplemented from mitk::VideoSource.
Definition at line 207 of file mitkOpenCVVideoSource.cpp.
Referenced by QmitkOpenCVVideoControls::on_PlayButton_clicked().
{ if(m_VideoCapture != NULL) m_CapturingInProcess = true; else m_CapturingInProcess = false; }
void mitk::OpenCVVideoSource::StopCapturing | ( | ) | [virtual] |
Reimplemented from mitk::VideoSource.
Definition at line 215 of file mitkOpenCVVideoSource.cpp.
Referenced by QmitkOpenCVVideoControls::Stop().
{ m_CapturingInProcess = false; }
void mitk::OpenCVVideoSource::UpdateVideoTexture | ( | ) | [protected] |
Definition at line 162 of file mitkOpenCVVideoSource.cpp.
{ //write the grabbed frame into an opengl compatible array, that means flip it and swap channel order if(!m_CurrentImage) return; if(m_CurrentVideoTexture == NULL) m_CurrentVideoTexture = new unsigned char[m_CaptureWidth*m_CaptureHeight*3]; // only undistort if not paused if(m_UndistortImage && !m_CapturePaused) m_UndistortCameraImage->UndistortImageFast(m_CurrentImage, 0); int width = m_CurrentImage->width; int height = m_CurrentImage->height; int widthStep = m_CurrentImage->widthStep; int nChannels = m_CurrentImage->nChannels; unsigned char* tex = m_CurrentVideoTexture; char* data = m_CurrentImage->imageData; char* currentData = m_CurrentImage->imageData; int hIndex=0; int wIndex=0; int iout,jout; for(int i=0;i<width*height*3;i+=3,++wIndex) { if(wIndex >= width) { wIndex=0; hIndex++; } // vertically flip the image iout = -hIndex+height-1; jout = wIndex; currentData = data + iout*widthStep; tex[i+2] = currentData[jout*nChannels + 0]; // B tex[i+1] = currentData[jout*nChannels + 1]; // G tex[i] = currentData[jout*nChannels + 2]; // R } }
bool mitk::OpenCVVideoSource::m_CapturePaused [protected] |
Definition at line 168 of file mitkOpenCVVideoSource.h.
IplImage* mitk::OpenCVVideoSource::m_CurrentImage [protected] |
Definition at line 164 of file mitkOpenCVVideoSource.h.
unsigned char* mitk::OpenCVVideoSource::m_CurrentVideoTexture [protected] |
Reimplemented from mitk::VideoSource.
Definition at line 165 of file mitkOpenCVVideoSource.h.
short mitk::OpenCVVideoSource::m_GrabbingDeviceNumber [protected] |
saves the grabbing device number (is -1 if a videofilename is used or if this is not initialized)
Definition at line 176 of file mitkOpenCVVideoSource.h.
IplImage* mitk::OpenCVVideoSource::m_PauseImage [protected] |
Definition at line 167 of file mitkOpenCVVideoSource.h.
bool mitk::OpenCVVideoSource::m_RepeatVideo [protected] |
Definition at line 179 of file mitkOpenCVVideoSource.h.
Definition at line 186 of file mitkOpenCVVideoSource.h.
bool mitk::OpenCVVideoSource::m_UndistortImage [protected] |
Definition at line 185 of file mitkOpenCVVideoSource.h.
bool mitk::OpenCVVideoSource::m_UseCVCAMLib [protected] |
Definition at line 182 of file mitkOpenCVVideoSource.h.
CvCapture* mitk::OpenCVVideoSource::m_VideoCapture [protected] |
Definition at line 161 of file mitkOpenCVVideoSource.h.
std::string mitk::OpenCVVideoSource::m_VideoFileName [protected] |
saves the video file name (is empty if a grabbing device is used or if this is not initialized)
Definition at line 172 of file mitkOpenCVVideoSource.h.