基于OpenCV,简单的使用Point Grey的SDK在MFC上打开单个或多个Point Grey相机
2015-07-08 22:23
411 查看
尝试打开的相机型号两种,一种是映美精的DMK41BF02(USB),另一种是灰点的GS3-U3-28S4M-C(USB)。
PC系统W7x64,VS2008,OPENCV2.3.1
参考kevinhughes27点击打开链接打开单目灰点的方法。
单开单目灰点相机
打开结果如上图。
打开双目的代码如下
NOTE:
1、需要到灰点的官网下载(http://www.ptgrey.com)下载适合自己PC的SDK;
2、Directshow,打开灰点相机的方法也可以在其官网找到。这边简要介绍一下,在自己
下载后的SDK中可以解压后,在Flycapture\bin(64 or x86)中找到上图红色框中的两个文件,用命令提示符运行进行对directshow 进行注册,即可用。如下:
Directshow打开相机需要的几个头文件库,和两个工程文件,使用时两个工程文件包含在自己的工程中,具体方法可以百度。
完成注册以后,也可以打开相机,打开会弹出属性页。
3、Opencv中的 cvCreateCameraCapture();函数网上说可以打开相机,但是尝试了很多次始终只能打开映美精的相机,灰点的死活在属性页弹出后,一点击确定就出BUG,楼主也没有解决,不知道为什么。
PC系统W7x64,VS2008,OPENCV2.3.1
参考kevinhughes27点击打开链接打开单目灰点的方法。
单开单目灰点相机
<span style="white-space:pre"> </span> Error error; Camera camera; // Get the image error=camera.Connect(NULL);//灰点的库函数调用,检测相机 error=camera.StartCapture();//开启相机 char key = 0; int i=0; while(1) { Image rawImage; error = camera.RetrieveBuffer( &rawImage );//捕获帧 if (error!=PGRERROR_OK) { AfxMessageBox("Capture error!");捕获失败弹出错误 continue; } // convert to rgb Kevin的例子,图像格式转换 Image rgbImage; rawImage.Convert( FlyCapture2::PIXEL_FORMAT_BGR, &rgbImage ); // convert to OpenCV Mat unsigned int rowBytes = (double)rgbImage.GetReceivedDataSize()/(double)rgbImage.GetRows(); cv::Mat image = cv::Mat(rgbImage.GetRows(), rgbImage.GetCols(), CV_8UC3, rgbImage.GetData(),rowBytes); //cv::imshow("image", image); IplImage *pImg=cvLoadImage("Lre.bmp");//在MFC中定义了一个显示控件,m_picture为控件的成员变量 *pImg=IplImage(image); CDC* pDC = m_picture.GetWindowDC(); CvvImage limg; CRect rect; m_picture.GetClientRect(&rect); limg.CopyOf(pImg); limg.DrawToHDC(pDC -> m_hDC,&rect); key = cv::waitKey(30); } if (error!=PGRERROR_OK) { } camera.Disconnect();
打开结果如上图。
打开双目的代码如下
Error error; BusManager busMgr; unsigned int numCameras=0; error=busMgr.GetNumOfCameras(&numCameras);//检测相机个数 if (error!=PGRERROR_OK) { AfxMessageBox("Insufficient number of cameras"); } Camera** ppCameras = new Camera*[numCameras]; // Connect to all detected cameras and attempt to set them to // a common video mode and frame rate for (unsigned int i = 0; i < numCameras; i++) { ppCameras[i] = new Camera(); PGRGuid guid; error = busMgr.GetCameraFromIndex( i, &guid );//获取每个相机的唯一ID // Connect to a camera error = ppCameras[i]->Connect( &guid );//连接相机 if (error != PGRERROR_OK) { AfxMessageBox("GUID=NO!"); } // Set all cameras to a specific mode and frame rate so they // can be synchronized CameraInfo camInfo; error = ppCameras[i]->GetCameraInfo( &camInfo );//获取相机的基本信息,可以忽略 if (error != PGRERROR_OK) { AfxMessageBox("INFORMATION ERROR"); } // error = ppCameras[i]->SetVideoModeAndFrameRate( VIDEOMODE_1600x1200Y8,FRAMERATE_15 ); //if (error!=PGRERROR_OK) // { // AfxMessageBox("MODEL error!"); // } } //Camera cameras; //error = cameras.StartSyncCapture( numCameras, (const Camera**)ppCameras,NULL,NULL );//works for FireWire cameras,not work for USB cameras error=ppCameras[0]->StartCapture();//开始拍照 error=ppCameras[1]->StartCapture(); if (error!=PGRERROR_OK) { AfxMessageBox("Startcapture error!"); } char key = 0; int i=0; while(1) { //Image rawImage; Image image0,image1; error=ppCameras[0]->RetrieveBuffer( &image0 );//获取下一帧图像 error=ppCameras[1]->RetrieveBuffer( &image1 ); if (error!=PGRERROR_OK) { AfxMessageBox("RetrieveBuffer error!"); } // convert to rgb Image rgbImage0,rgbImage1; //BMPOption option;//指定存储的图像 image0.Convert( FlyCapture2::PIXEL_FORMAT_BGR, &rgbImage0 ); image1.Convert( FlyCapture2::PIXEL_FORMAT_BGR, &rgbImage1 ); // convert to OpenCV Mat对图像进行压缩,转换成CV矩阵 unsigned int rowBytes0 = (double)rgbImage0.GetReceivedDataSize()/(double)rgbImage0.GetRows(); cv::Mat imageR = cv::Mat(rgbImage0.GetRows(), rgbImage0.GetCols(), CV_8UC3, rgbImage0.GetData(),rowBytes0); unsigned int rowBytes1 = (double)rgbImage1.GetReceivedDataSize()/(double)rgbImage1.GetRows(); cv::Mat imageL = cv::Mat(rgbImage1.GetRows(), rgbImage1.GetCols(), CV_8UC3, rgbImage1.GetData(),rowBytes1); //cv::imshow("image", imageR); //将cv::Mat转换成IplImage格式 IplImage *pImgR=cvCreateImage(cvSize(1600,1200),8,3);//简单的初始化Lre.bmp,工程中任意的一张图像。 *pImgR=IplImage(imageR); //MFC图像显示控件 CDC* pDC = m_picture2.GetWindowDC(); CvvImage limg; CRect rect; m_picture2.GetClientRect(&rect); limg.CopyOf(pImgR); limg.DrawToHDC(pDC -> m_hDC,&rect); cvSaveImage("RIGHT.BMP",pImgR); IplImage *pImgL=cvCreateImage(cvSize(1600,1200),8,3); *pImgL=IplImage(imageL); CDC* pDC1 = m_picture.GetWindowDC(); CvvImage limg1; CRect rect1; m_picture.GetClientRect(&rect1); limg1.CopyOf(pImgL); limg1.DrawToHDC(pDC1 -> m_hDC,&rect1); cvSaveImage("LEFT.BMP",pImgL); key = cv::waitKey(50);
NOTE:
1、需要到灰点的官网下载(http://www.ptgrey.com)下载适合自己PC的SDK;
2、Directshow,打开灰点相机的方法也可以在其官网找到。这边简要介绍一下,在自己
下载后的SDK中可以解压后,在Flycapture\bin(64 or x86)中找到上图红色框中的两个文件,用命令提示符运行进行对directshow 进行注册,即可用。如下:
Directshow打开相机需要的几个头文件库,和两个工程文件,使用时两个工程文件包含在自己的工程中,具体方法可以百度。
完成注册以后,也可以打开相机,打开会弹出属性页。
3、Opencv中的 cvCreateCameraCapture();函数网上说可以打开相机,但是尝试了很多次始终只能打开映美精的相机,灰点的死活在属性页弹出后,一点击确定就出BUG,楼主也没有解决,不知道为什么。
相关文章推荐
- 大型网站图片服务器架构的演进
- Linux系统NFS故障现象
- Proxy代理(AOP实现原理)
- cacti监控工具之自定数据收集方法
- StormDRPC 概念以及简单例子测试 分类: hadoop 2015-07-08 22:10 92人阅读 评论(0) 收藏
- Tomcat配置(备忘)
- squid配置的几个例子
- centos桥接模式下主机不能联网
- centos7 主机访问不了虚拟机---firewall
- OPENSSL中RSA私钥文件(PEM格式)解析
- linux运维笔记——curl
- linux运维笔记——curl
- Linux下开启关闭SeLinux
- 在 Linux 中配置 SFTP 环境
- linux快速生成大文件方法
- OpenStack之二
- hadoop shell命令介绍
- linux下使用命令修改IP地址
- linux下使用命令修改IP地址
- Hadoop-2.6.0学习笔记(一)HA集群搭建