Qt之設定BASLER相機引數

2021-08-15 02:30:24 字數 3566 閱讀 1193

參考:

參考:一、在設定相機引數之前,先要獲取相機物件。pylon::ctlfactory 具有乙個 createdevice() 方法可以用來生成乙個相機物件,並返回乙個指向 ipylondevice 的指標。下面的**用來獲取列舉出來的第乙個相機對應的物件。

pylon::ctlfactory& tlfactory = ctlfactory::getinstance();

deviceinfolist_t lstdevices;

tlfactory.enumeratedevices( lstdevices );

ipylondevice * pdevice;

if(!lstdevices.empty())

上面的**還可以簡化為:

pylon::ctlfactory& tlfactory = ctlfactory::getinstance();

ipylondevice * pdevice = tlfactory.createfirstdevice();

上面 createfirstdevice 函式是用來生成列舉到的第乙個相機的介面。我們知道傳輸層還分 gige、usb等許多中,如果我們希望直接生成 gige 介面的第乙個相機介面,可以先獲得gige 傳輸層的介面,然後呼叫介面中的createfirstdevice函式,具體可以參考下面的**片段:

pylon::ctlfactory& tlfactory = ctlfactory::getinstance();

pylon::igigetransportlayer* ptl = static_cast(tlfactory.createtl("baslergige"));

ipylondevice * pdevice = ptl->createfirstdevice();

pylon::ctlfactory& tlfactory = ctlfactory::getinstance();

ipylondevice * pdevice = tlfactory.createfirstdevice();

genapi::inodemap* nodemap = pdevice->getnodemap();

genapi::inodemap* tlnodemap = pdevice->gettlnodemap();

那麼乙個相機都有哪些引數,這些引數的名稱是什麼呢?這就需要參考 genicam standard feature naming convention (sfnc)了。basler 的 usb3 的相機遵守 sfnc 2.0 標準,gige 和 firewire 相機只支援 1.x 版本的 sfnc。sfnc 2.0 和 sfnc 1.x 還是有不少差異的。比如相機的增益,在 sfnc 2.0 標準中是浮點型參量,名稱為 「gain」, 在 1.x 中是整數型參量,名稱為 「gainraw」。下面舉個例子,我們要獲取 「gain」 這個參量的範圍,並且將這個參量的值設為最大最小值的平均值。那我們的**可以這樣寫:

pylon::ctlfactory& tlfactory = ctlfactory::getinstance();

ipylondevice * pdevice = tlfactory.createfirstdevice();

genapi::inodemap* nodemap = pdevice->getnodemap();

genapi::inode *pnode = pnodemap->getnode("gain");

genapi::cfloatptr gain(pnode);

float gainmin = gain->getmin();

float gainmax = gain->getmax();

qdebug() << "current gain = " << gain->getvalue();

gain->setvalue(gainmin + (gainmax - gainmin) / 2.0);

這裡我們要注意幾個地方,首先如果我們的相機不支援 gain 這個引數,那麼 pnode 將是空指標。後面的操作就會報錯。第二,gain 這個引數不一定可讀可寫,如果不可讀 gain->getmin() 就會報錯。如果不可寫,那麼 gain->setvalue() 就會報錯。所以我們應該用 genapi::isreadable() 和 genapi::iswritable() 來測試這個 inode 介面是否可以讀寫。另外還有一點需要特別注意,相機的引數都是在相機被開啟後才可以讀寫的。如果我們知道相機是哪個傳輸層的,還可以有更簡單的訪問方式。比如我們的相機是 gige 介面的,那麼可以從 pdevice 構造乙個 cbaslergigeinstantcamera 物件,然後通過這個物件訪問相機的各個屬性。比如下面的**:

pylon::ctlfactory& tlfactory = ctlfactory::getinstance();

pylon::igigetransportlayer* ptl = static_cast(tlfactory.createtl("baslergige"));

ipylondevice * pdevice = ptl->createfirstdevice();

cbaslergigeinstantcamera camera(pdevice);

camera.open();

qdebug() << genapi::isreadable(camera.gainraw);

qdebug() << "gainraw = " << camera.gainraw.getvalue();

qdebug() << "gainraw.getmax() = " << camera.gainraw.getmax();

qdebug() << genapi::iswritable(camera.gainraw);

camera.gainraw = camera.gainraw.getmax();

camera.gainraw.setvalue(camera.gainraw.getmin());

camera.close();

二、具體例子

/*index = 0//設定相機的內觸發  

= 1//設定相機的外觸發

= 2//設定相機的**時間

= 3//設定相機的增益

= 4//相機的頻率

= 5//的寬度

= 6//的高度

= 7//燈的觸發訊號

*/

static void setupcamera( pylon::cinstantcamera& camera, int index)

else if(index == 1)

else if(index == 2)

else if(index == 3)

else if(index == 4)

else if(index == 5)

else if(index == 6)

else if(index == 7)

Basler basler設定相機引數

basler basler設定相機引數 index 0 設定相機的內觸發 1 設定相機的外觸發 2 設定相機的 時間 3 設定相機的增益 4 相機的頻率 5 的寬度 6 的高度 7 燈的觸發訊號 static void setupcamera pylon cinstantcamera camera,...

osg設定相機引數,包括初始位置

嚴重注意!以下設定必須在viewer.realize 之後,否則不起作用!設定相機的位置,可以通過cameramanipulator 一般是osgga trackballmanipulator 設定,可以使用settransformation設定 設定相機的其他引數,viewmatrix,proje...

Qt 之 QLabel 設定面罩

qlabel 是qt 中的標籤類,一般情況我們只是設定文字描述,但是qlabel不僅僅只是顯示一些文字介紹那麼簡單。qlabel支援html中標籤的使用,同時可以設定普通和動態圖。這裡簡單介紹一下如何為qlable設定面罩。很簡單,通過設定不同形狀的面罩可以達到不同的效果。1 設定動態 qpixma...