一、概述
- 常规相机中易于使用的应该得算USB免驱相机,因为没有内置驱动,采用通常的如opencv相机调用函数即可进行相机设置及获取图像;
- 但免驱相机通常是USB2.0相机,倘若需要跟高性能(高分辨率,高帧率等)的相机则需要考虑USB3.0或者网口类型的相机等;
- 但作为商业化的工业相机,考虑自我保护或不侵犯别人的技术等,通常都会自带自己的一套相机驱动等;
- 为此,原来用的代码中调用相机的部分代码则需要修改成相机内置的调用函数以便于使用相机。
二、OpenCV环境中使用Flycapture
下面主要介绍在opencv3环境下Flycapture的基本使用流程
-
主要头文件及名称空间
#include "FlyCapture2.h" //主要需要包含的头文件 using namespace FlyCapture2; //在FlyCapture类中定义了很多子函数可供调用
-
相机初始化及调用
Camera camera; //创建一个相机对象 Error error; //创建一个Error对象,用于指示相机使用过程中的异常 error = camera.Connect(0); //连接一个相机,并返回是否连接成功 if ( error != PGRERROR_OK ) //默认正常的话返回值为PGRERROR_OK { std::cout << "Failed to connect to camera" << std::endl; return false; } error = camera.StartCapture(); //开始采集相机图像,返回值error的比较判断同上面一致
-
获取图像及转换成Mat类型
// 获取相机中原始图像 Image rawImage; Error error = camera.RetrieveBuffer( &rawImage ); // 转换为RGB图像 Image rgbImage; rawImage.Convert( FlyCapture2::PIXEL_FORMAT_BGR, &rgbImage ); // 转换为OpenCV格式的图像 unsigned int rowBytes = (double)rgbImage.GetReceivedDataSize()/(double)rgbImage.GetRows(); cv::Mat image = cv::Mat(rgbImage.GetRows(), rgbImage.GetCols(), CV_8UC3, rgbImage.GetData(),rowBytes);
-
显示图像及关闭相机
//采用opencv中的imshow则可显示Mat类型的图像,同理其他opencv函数也可对图像进行操作 cv::imshow("image", image); key = cv::waitKey(30); //停止捕获图像 error = camera.StopCapture(); //断开相机连接 camera.Disconnect();
-
设置相机属性和参数
//The following FlyCapture code snippet sets the camera to: 640x480 Y8 at 60 FPS. Camera.SetVideoModeandFrameRate( VIDEOMODE_640x480Y8 , FRAMERATE_60 ); // 其他还有:
三、参考资料
版权声明:本文为yph001原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。