參考:
參考:一、在設定相機引數之前,先要獲取相機物件。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...