・リンカの入力にてheaderを設定
--------------------------------------------------------
#include "CVBase.h"
#include <ctype.h>
#include <stdio.h>
CVBase *base;
/* コールバック関数 */
void on_mouse (int event, int x, int y, int flags, void *param = NULL)
{
base->mouseEvent(event,x,y,flags,param);
}
/* コールバック関数 */
void on_mouse2 (int event, int x, int y, int flags, void *param = NULL)
{
base->mouseEvent2(event,x,y,flags,param);
}
int main (int argc, char **argv)
{
int mode;
if (argc == 1){
FILE *fp;
fp = fopen("ini/mode.txt", "r");
fscanf(fp,"%d",&mode);
mode = 11;
}else if(argc == 2){
mode=atoi(argv[1]);
}
switch(mode){
case 0:
base = new CVBase();
break;
default:
base = new CVBase();
break;
}
base->init();
base->mainloop();
base->term();
return 0;
}
OpenCVheader.h
--------------------------------------------------------
// バージョン取得
#define CV_VERSION_STR CVAUX_STR(CV_MAJOR_VERSION) CVAUX_STR(CV_MINOR_VERSION) CVAUX_STR(CV_SUBMINOR_VERSION)
// ビルドモード
#ifdef _DEBUG
#define CV_EXT_STR "d.lib"
#else
#define CV_EXT_STR ".lib"
#endif
// ライブラリのリンク(不要な物はコメントアウト)
#pragma comment(lib, "C:\\OpenCV2.4.5\\opencv\\build\\x86\\vc10\\lib\\opencv_core" CV_VERSION_STR CV_EXT_STR)
#pragma comment(lib, "C:\\OpenCV2.4.5\\opencv\\build\\x86\\vc10\\lib\\opencv_highgui" CV_VERSION_STR CV_EXT_STR)
#pragma comment(lib, "C:\\OpenCV2.4.5\\opencv\\build\\x86\\vc10\\lib\\opencv_imgproc" CV_VERSION_STR CV_EXT_STR)
#pragma comment(lib, "C:\\OpenCV2.4.5\\opencv\\build\\x86\\vc10\\lib\\opencv_calib3d" CV_VERSION_STR CV_EXT_STR)
//#pragma comment(lib, "opencv_gpu" CV_VERSION_STR CV_EXT_STR)
#pragma comment(lib, "C:\\OpenCV2.4.5\\opencv\\build\\x86\\vc10\\lib\\opencv_video" CV_VERSION_STR CV_EXT_STR)
#pragma comment(lib, "C:\\OpenCV2.4.5\\opencv\\build\\x86\\vc10\\lib\\opencv_objdetect" CV_VERSION_STR CV_EXT_STR)
#pragma comment(lib, "C:\\OpenCV2.4.5\\opencv\\build\\x86\\vc10\\lib\\opencv_features2d" CV_VERSION_STR CV_EXT_STR)
//#pragma comment(lib, "opencv_flann" CV_VERSION_STR CV_EXT_STR)
//#pragma comment(lib, "opencv_ffmpeg" CV_VERSION_STR CV_EXT_STR)
//#pragma comment(lib, "opencv_ts" CV_VERSION_STR CV_EXT_STR)
//#pragma comment(lib, "opencv_contrib" CV_VERSION_STR CV_EXT_STR)
//#pragma comment(lib, "opencv_ml" CV_VERSION_STR CV_EXT_STR)
//#pragma comment(lib, "opencv_legacy" CV_VERSION_STR CV_EXT_STR)
CVBase.h
--------------------------------------------------------
#pragma once
#include "opencv2/opencv.hpp"
#include "OpenCVheader.h"
class CVBase
{
public:
CVBase(void);
~CVBase(void);
CvCapture *capture;
IplImage *frame;
int ch;
CvCapture *fromFile(char *FileName);
CvCapture *fromCamera(void);
virtual void init(void);
virtual void mainloop(void);
virtual void term(void);
virtual void mouseEvent (int event, int x, int y, int flags, void *param);
virtual void mouseEvent2 (int event, int x, int y, int flags, void *param);
void drawLine(IplImage *image,CvPoint pt1,CvPoint pt2,CvScalar rcolor,int width);
virtual void copyArea(IplImage *img ,IplImage *areaImg,CvPoint start,CvPoint end);
};
CVBase.cpp
--------------------------------------------------------
#include "CVBase.h"
#include <stdio.h>
void on_mouse (int event, int x, int y, int flags, void *param = NULL);
CVBase::CVBase(void)
{
}
CVBase::~CVBase(void)
{
}
void CVBase::mouseEvent (int event, int x, int y, int flags, void *param)
{
switch (event) {
case CV_EVENT_MOUSEMOVE:
break;
case CV_EVENT_LBUTTONDOWN:
break;
case CV_EVENT_LBUTTONUP:
break;
}
}
void CVBase::mouseEvent2 (int event, int x, int y, int flags, void *param)
{
switch (event) {
case CV_EVENT_MOUSEMOVE:
break;
case CV_EVENT_LBUTTONDOWN:
break;
case CV_EVENT_LBUTTONUP:
break;
}
}
void CVBase::drawLine(IplImage *image,CvPoint pt1,CvPoint pt2,CvScalar rcolor,int width)
{
//CvScalar rcolor = CV_RGB (255, 0, 0);
cvRectangle (image, pt1, pt2, rcolor, width, CV_AA, 0);
}
void CVBase::copyArea(IplImage *img ,IplImage *areaImg,CvPoint start,CvPoint end)
{
uchar p[3];
int hoge[3] ={0,0,0};
for (int y = 0; y < -end.y+start.y; y++) {
for (int x = 0; x < end.x-start.x; x++) {
int imgX = start.x + x;
int imgY = end.y + y;
p[0] = img->imageData[img->widthStep * imgY + imgX * 3]; // B
p[1] = img->imageData[img->widthStep * imgY + imgX * 3 + 1]; // G
p[2] = img->imageData[img->widthStep * imgY + imgX * 3 + 2]; // R
hoge[0]+=p[0];
hoge[1]+=p[1];
hoge[2]+=p[2];
areaImg->imageData[areaImg->widthStep * (areaImg->height-y) + x * 3] = p[0];
areaImg->imageData[areaImg->widthStep * (areaImg->height-y) + x * 3 + 1] = p[1];
areaImg->imageData[areaImg->widthStep * (areaImg->height-y) + x * 3 + 2] = p[2];
}
}
}
CvCapture *CVBase::fromFile(char *FileName)
{
return cvCaptureFromFile(FileName);//"C:\\Users\\aiko\\Documents\\Visual Studio 2010\\Projects\\OpenCVBase\\1_01_H_131129153000.avi");
}
CvCapture *CVBase::fromCamera(void)
{
return cvCreateCameraCapture (0);
}
void CVBase::init(void)
{
this->capture = cvCaptureFromFile("movie/2_03_R_131126171500.avi");//"C:\\Users\\aiko\\Documents\\Visual Studio 2010\\Projects\\OpenCVBase\\1_01_H_131129153000.avi");
cvNamedWindow( "Capture", 1 );
cvSetMouseCallback ("Capture", on_mouse);
double fps = cvGetCaptureProperty(this->capture,CV_CAP_PROP_FPS);
}
void CVBase:: mainloop(void)
{
while (1) {
this->frame = cvQueryFrame (this->capture);
if ( this->frame == NULL ){
cvSetCaptureProperty( this->capture, CV_CAP_PROP_POS_FRAMES, 0.0 );
this->frame = cvQueryFrame(this->capture);
continue;
}
cvShowImage ("Capture",this->frame);
ch = cvWaitKey ( 1 ); // 0 はディレイ時間 (ミリ秒単位)
if (ch == '\x1b') {
// ESC キー
break;
}
}
}
void CVBase::term(void)
{
cvReleaseCapture(& this->capture);
cvDestroyWindow("Capture");
}
0 件のコメント:
コメントを投稿