一、概述
- 常規相機中易於使用的應該得算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 ); // 其他還有: