本人在做项目的过程中,使用到了加拿大一家公司生产的Pointgray相机(32位,也有64位的),需要配置在VS2012中(其他版本的vs的配置方法类似)使用,配置方法如下:
1.在公司的官网上下载相适应的相机SDK包;
2.打开vs2012,新建一个项目:选择Debug x86 (64bit的SDK不支持win32 debug模式);
3.双击Debug |x86,进入到属性页,点击VC++目录后,需要添加的部分 是包含目录和库目录,其中包含目录是所用到的.h文件的路径,库目录是所用到的存放静态库.lib文件的路径。
包含目录中添加:C:\Program Files\Point Grey Research\FlyCapture2\include
库目录添加:C:\Program Files\Point Grey Research\FlyCapture2\lib86或者添加(有的没有在lib后面加86或者是64):C:\Program Files\Point Grey Research\FlyCapture2\lib当然,必须是你的pointgraySDK包解压在C盘相应的位置才行。
4.连接器->输入->附加依赖项 中添加:FlyCapture2.lib
配置好之后就可以对相机进行控制了,但是Opencv中的图片格式是Mat类型的,所以还要对相机采集的图片格式进行转换,才能用Opencv进行采集与处理,程序如下:
- #include "FlyCapture2.h"
- //#include <opencv2/core/core.hpp>
- //#include <opencv2/highgui/highgui.hpp>
- #include<opencv2/opencv.hpp>
- #include <iostream>
- using namespace FlyCapture2;
- /*int main()
- {
- // Do Flycapture2 related stuff...
- Camera cam;
- return 0;
- }*/
- int main()
- {
- Error error;
- Camera camera;
- CameraInfo camInfo;
- // Connect the camera
- error = camera.Connect( 0 );
- if ( error != PGRERROR_OK )
- {
- std::cout << "Failed to connect to camera" << std::endl;
- system("pause");
- return false;
- }
- // Get the camera info and print it out
- error = camera.GetCameraInfo( &camInfo );
- if ( error != PGRERROR_OK )
- {
- std::cout << "Failed to get camera info from camera" << std::endl;
- return false;
- }
- std::cout << camInfo.vendorName << " "
- << camInfo.modelName << " "
- << camInfo.serialNumber << std::endl;
- error = camera.StartCapture();
- if ( error == PGRERROR_ISOCH_BANDWIDTH_EXCEEDED )
- {
- std::cout << "Bandwidth exceeded" << std::endl;
- return false;
- }
- else if ( error != PGRERROR_OK )
- {
- std::cout << "Failed to start image capture" << std::endl;
- return false;
- }
- // capture loop
- char key = 0;
- while(key != 'q')
- {
- // Get the image
- Image rawImage;
- Error error = camera.RetrieveBuffer( &rawImage );
- if ( error != PGRERROR_OK )
- {
- std::cout << "capture error" << std::endl;
- continue;
- }
- // convert to rgb
- 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);
- key = cv::waitKey(30);
- }
- error = camera.StopCapture();
- if ( error != PGRERROR_OK )
- {
- // This may fail when the camera was removed, so don't show
- // an error message
- }
- camera.Disconnect();
- system("pause");
- return 0;
- }