[機器視覺]basler相機使用SN編號打開相機和采集

背景分析

在項目中是用basler相機采圖時,一般用的比較多的遍歷相機,然后使用CreateFirstDevice這個函數(shù)獲取相機,有些時候可能需要同時連接多個相機,這里一般是遍歷后,再循環(huán)打開相機,根據(jù)打開相機的SN號確定是否是自己需要的相機,但如果設(shè)備同時連接了多個相機,我們只使用其中的1到2個,這時遍歷打開相機就會出現(xiàn)相機占用情況,而且相機數(shù)量多的時候,遍歷相機和打開相機也比較耗時。

遍歷打開相機

方法一:遍歷所有相機,獲取相機的SN編碼跟配置文件中的SN進行對比,確認后再打開相機。

    //輸入SN號
    std::string s = snNumber.toStdString();
    DeviceInfoList_t devList;
    //初始化
    PylonInitialize();
    CTlFactory& TlFactory = CTlFactory::GetInstance();
    int camNum = TlFactory.EnumerateDevices(devList);
    for(int i=0;i<camNum;i++)
    {
        QString snName = QString(devList[i].GetSerialNumber());
        if(snNumber == snName)
        {
            Pylon::IPylonDevice* pDevice = CTlFactory::GetInstance().CreateDevice( devList[i]);
            m_basler.RegisterImageEventHandler(this, RegistrationMode_Append, Cleanup_Delete);
            m_basler.Attach(pDevice,Cleanup_Delete);
            m_basler.Open();
            if (!m_basler.IsOpen() || m_basler.IsGrabbing())
            {
                qDebug()<<"camera open failed"<<Qt::endl;
                return;
            }
        }
    }

直接根據(jù)SN編碼打開相機

方法二:在初始化后,直接將已知SN編號打開相機。

    //使用SN編碼直接打開相機
    std::string s = snNumber.toStdString();
    PylonInitialize();
    CDeviceInfo info;
    info.SetSerialNumber(s.c_str());
    Pylon::IPylonDevice* pDevice = CTlFactory::GetInstance().CreateDevice(info);
    m_basler.RegisterImageEventHandler(this, RegistrationMode_Append, Cleanup_Delete);
    m_basler.Attach(pDevice,Cleanup_Delete);
    m_basler.Open();
    if (!m_basler.IsOpen() || m_basler.IsGrabbing())
    {
        qDebug()<<"camera open failed"<<Qt::endl;
        return;
    }

注意事項

方法二適合在已確認連接好SN編號的相機的情況下初始化相機,如果找不到相機,則會出現(xiàn)創(chuàng)建相機錯誤的bug
相對而言,方法一對相機列表進行比對,可獲知相機是否存在,然后再進行下一步操作。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容