首先需要初始化Pylon,即調(diào)用PylonInitialize();
在一個(gè)try{} catch(){}語句中進(jìn)行相關(guān)的操作。
調(diào)用相機(jī)的傳輸層工廠類定義一個(gè)工廠類的引用菲茬,并初始化它坚弱,也就是CTlFactory& tlFactory = CTlFactory::GetInstance();
得到所有連接的pylon相機(jī)盛正,DeviceInfoList_t devices; tlFactory.EnumerateDevices(devices);
創(chuàng)建一個(gè)相機(jī)實(shí)例數(shù)組酒奶,CInstantCameraArray cameras(min(devices.size(), c_maxCamerasToUse));
在一個(gè)for循環(huán)當(dāng)中把所有檢測(cè)到的相機(jī)附加到相機(jī)實(shí)例數(shù)組當(dāng)中蚁孔,cameras[i].Attach(tlFactory.CreateDevice(device[i]));
兩個(gè)相機(jī)開始抓取圖像,病定義一個(gè)存取抓取結(jié)果的變量讥蟆,cameras.StartGrabbing(); CGrabResultPtr ptrGrabResult;
for循環(huán)控制抓取的圖片數(shù)量,在循環(huán)內(nèi)定義一個(gè)可以標(biāo)志相機(jī)序列的變量纺阔,然后通過cameras數(shù)組訪問相機(jī)的相關(guān)數(shù)據(jù)即可
最后終止Pylon相機(jī)瘸彤,即調(diào)用PylonTerminate。
#include <pylon/PylonIncludes.h>
using namespace Pylon;
using namespace std;
static const uint32_t c_countOfImagesToGrab = 10;
static const size_t c_maxCamerasToUse = 2;
int main(int argc, char* argv[])
{
int exitCode = 0;
PylonInitialize();
try
{
CTlFactory& tlFactory = CTlFactory::GetInstance();
DeviceInfoList_t devices;
if ( tlFactory.EnumerateDevices(devices) == 0 )
{
throw RUNTIME_EXCEPTION( "No camera present.");
}
CInstantCameraArray cameras( min( devices.size(), c_maxCamerasToUse));
cout << "devices.size(): " << devices.size() << endl;
for ( size_t i = 0; i < cameras.GetSize(); ++i)
{
cameras[ i ].Attach( tlFactory.CreateDevice( devices[ i ]));
cout << "Using device " << cameras[ i ].GetDeviceInfo().GetModelName() << endl;
}
for( uint32_t i = 0; i < c_countOfImagesToGrab && cameras.IsGrabbing(); ++i)
{
cameras.RetrieveResult( 5000, ptrGrabResult, TimeoutHandling_ThrowException);
intptr_t cameraContextValue = ptrGrabResult->GetCameraContext();
cout << "Camera " << cameraContextValue << ": " << cameras[ cameraContextValue ].GetDeviceInfo().GetModelName() << endl;
cout << "GrabSucceeded: " << ptrGrabResult->GrabSucceeded() << endl;
cout << "SizeX: " << ptrGrabResult->GetWidth() << endl;
cout << "SizeY: " << ptrGrabResult->GetHeight() << endl;
const uint8_t *pImageBuffer = (uint8_t *) ptrGrabResult->GetBuffer();
cout << "Gray value of first pixel: " << (uint32_t) pImageBuffer[0] << endl << endl;
}
}
catch (const GenericException &e)
{
cerr << "An exception occurred." << endl
<< e.GetDescription() << endl;
exitCode = 1;
}
cerr << endl << "Press Enter to exit." << endl;
while( cin.get() != '\n');
PylonTerminate();
return exitCode;
}