- 阅读权限
- 255
- 威望
- 0 级
- 论坛币
- 49957 个
- 通用积分
- 79.5487
- 学术水平
- 253 点
- 热心指数
- 300 点
- 信用等级
- 208 点
- 经验
- 41518 点
- 帖子
- 3256
- 精华
- 14
- 在线时间
- 766 小时
- 注册时间
- 2006-5-4
- 最后登录
- 2022-11-6
|
基于OpenCV数据采集
- 实现功能:同时采集两路USB摄像头数据,并显示,具有图片保存功能(点击左键保存图片,并暂停视频;右键继续视频)。步骤就不说了,很简单,直接放代码了:
- #include <cvcam.h>
- #include <cv.h>
- #include <highgui.h>
- #include "stdio.h"
- #include <windows.h>
- void StereoCallback(IplImage *frame1,IplImage *frame2);
- void onMouse1(int Event,int x,int y,int flags,void *param);
- void onMouse2(int Event,int x,int y,int flags,void *param);
- IplImage *image1,*image2;
- char *strleft[4]={"left1.bmp","left2.bmp","left3.bmp","left4.bmp"};
- char *strright[4]={"right1.bmp","right2.bmp","right3.bmp","right4.bmp"};
- void main()
- {
- HWND CaptureWindow1=0; //不赋值也行
- HWND CaptureWindow2=0;
- //int ncams=cvcamGetCamerasCount(); //获取摄像头的个数,在这里可有可无
- //用对话框的形式来选取摄像头
- int *CameraNumber;
- int nSelected = cvcamSelectCamera(&CameraNumber);
- /* //灰色图像
- image1=cvCreateImage(cvSize(320,240),IPL_DEPTH_8U,1);
- image2=cvCreateImage(cvSize(320,240),IPL_DEPTH_8U,1);
- */
- //彩色图像
- image1=cvCreateImage(cvSize(320,240),IPL_DEPTH_8U,3);
- image2=cvCreateImage(cvSize(320,240),IPL_DEPTH_8U,3);
- //初始化两个摄像头
- cvNamedWindow("cvcam1 Window",1);
- CaptureWindow1=(HWND)cvGetWindowHandle("cvcam1 Window");
- cvcamSetProperty(CameraNumber[0], CVCAM_PROP_ENABLE, CVCAMTRUE);
- cvcamSetProperty(CameraNumber[0], CVCAM_PROP_RENDER, CVCAMTRUE);
- cvcamSetProperty(CameraNumber[0], CVCAM_PROP_WINDOW, &CaptureWindow1);
- // cvSetMouseCallback("cvcam1 Window",onMouse1,0);
- cvNamedWindow("cvcam2 Window",1);
- CaptureWindow2=(HWND)cvGetWindowHandle("cvcam2 Window");
- cvcamSetProperty(CameraNumber[1], CVCAM_PROP_ENABLE, CVCAMTRUE);
- cvcamSetProperty(CameraNumber[1], CVCAM_PROP_RENDER, CVCAMTRUE);
- cvcamSetProperty(CameraNumber[1], CVCAM_PROP_WINDOW, &CaptureWindow2);
- // cvSetMouseCallback("cvcam2 Window",onMouse2,0);
- //让两个摄像头同步
- cvcamSetProperty(CameraNumber[0],CVCAM_STEREO_CALLBACK,(void*)&StereoCallback);
- //启动程序
- cvcamInit();
- cvcamStart();
- cvSetMouseCallback("cvcam1 Window",onMouse1,0);
- cvSetMouseCallback("cvcam2 Window",onMouse2,0);
- cvWaitKey(0);
- cvcamStop();
- free(CameraNumber);
- cvcamExit();
- cvDestroyWindow("cvcam1 Window");
- cvDestroyWindow("cvcam2 Window");
- }
- void StereoCallback(IplImage* frame1,IplImage *frame2)
- {
- /* //把图像转换成灰度图并保存到image中
- cvCvtColor(frame1,image1,CV_RGB2GRAY);
- cvCvtColor(frame2,image2,CV_RGB2GRAY);
- */
- //拷贝图像到全局变量image中 该函数这样用存在问题
- // cvCopy(frame1,image1);
- // cvCopy(frame2,image2);
- image1=cvCloneImage(frame1);
- image2=cvCloneImage(frame2);
- //对截取的图像翻转
- cvFlip(image1,image1,0);
- cvFlip(image2,image2,0);
- }
- void onMouse1(int Event,int x,int y,int flags,void *param)
- {
- static int num=0;
- if(Event==CV_EVENT_LBUTTONDOWN)
- {
- if(num==4)num=0;//只是固定定义了保存4张图片,为了不让程序非法而设置的复原
- cvcamPause();
- //图像保存
- cvSaveImage(strleft[num],image1);
- // cvSaveImage(strright[num],image2);
- // cvSaveImage("left.bmp",image1);
- // cvSaveImage("right.bmp",image2);
- }
- if(Event==CV_EVENT_RBUTTONDOWN)
- {
- cvcamResume();
- num++;
- }
-
- }
- void onMouse2(int Event,int x,int y,int flags,void *param)
- {
- static int num=0;
- if(Event==CV_EVENT_LBUTTONDOWN)
- {
- if(num==4)num=0;//只是固定定义了保存4张图片,为了不让程序非法而设置的复原
- cvcamPause();
- //图像保存
- // cvSaveImage(strleft[num],image1);
- cvSaveImage(strright[num],image2);
- // cvSaveImage("left.bmp",image1);
- // cvSaveImage("right.bmp",image2);
- }
- if(Event==CV_EVENT_RBUTTONDOWN)
- {
- cvcamResume();
- num++;
- }
-
- }
复制代码
|
|