/
CWebcam.cpp
62 lines (48 loc) · 1.2 KB
/
CWebcam.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#include "stdafx.h"
#include "CWebcam.h"
#include <FL/fl_ask.H>
CWebcam::CWebcam(){
capture = (CvCapture*)0;
frame = (IplImage*)0;
}
void CWebcam::captureFromCamera(int index) {
capture = cvCaptureFromCAM(index );
if(capture == (CvCapture*)0)
fl_alert("Webcam not opened");
}
void CWebcam::queryFrame() {
if (frame)
cvReleaseImage(&frame);
frame = cvQueryFrame(capture);
if (!frame)
fl_alert("Frame not retrieved");
}
int CWebcam::grabFrame() {
return cvGrabFrame(capture);
}
void CWebcam::retrieveFrame() {
frame = cvRetrieveFrame(capture);
if(!frame)
fl_alert("Frame not Retrieved");
}
IplImage* CWebcam::getFrame() {
IplImage* image = (IplImage*)0;
grabFrame();
retrieveFrame();
// color image
if(frame) {
if (frame->nChannels == 3) {
int origin = frame->origin;
CvMat* mat, stub;
mat = cvGetMat( frame, &stub );
cvConvertImage( mat, frame, CV_CVTIMG_SWAP_RB );
image = cvCreateImage( cvSize(frame->width, frame->height), IPL_DEPTH_8U, 3 );
image->widthStep = image->width * 3;
if (origin == IPL_ORIGIN_TL)
cvCopy( frame, image, 0);
else
cvFlip( frame, image, 0);
}
}
return image;
}