文章目錄
- 1 初始化相機,采集第一幀圖像
- 2 回調方式采集圖像
- 3 視頻教程
1 初始化相機,采集第一幀圖像
#include <iostream>
#include <GalaxyIncludes.h>
using namespace std;int main()
{//首先,對相機資源進行初始化IGXFactory::GetInstance().Init();//第二部,枚舉相機//先定義一個設備列表,用來存放枚舉到的設備GxIAPICPP::gxdeviceinfo_vector cam_list;//枚舉同一網段下的相機 無ALLIGXFactory::GetInstance().UpdateDeviceList(1000,cam_list);//枚舉同一網絡下所有相機 有ALL//IGXFactory::GetInstance().UpdateAllDeviceList(1000, cam_list);//打印設備的SN碼、設備名稱、制造商//枚舉到相機后,就可以獲取到相機的一些設備信息int cam_num = cam_list.size();GxIAPICPP::gxstring sn = cam_list[0].GetSN();GxIAPICPP::gxstring id = cam_list[0].GetDeviceID();GxIAPICPP::gxstring cmpy = cam_list[0].GetVendorName();std::cout << "檢測到 " << cam_num << " 臺相機 \r\n";std::cout << "SN碼: " << sn << "\r\n";std::cout << "相機ID: " << id << "\r\n";std::cout << "制造商: " << cmpy << "\r\n";//打開相機,可以通過IP、SN、MAC、ID等唯一標識符打開相機//這里通過SN打開相機,打開相機的方式有三種: 只讀、控制、獨占CGXDevicePointer cam = IGXFactory::GetInstance().OpenDeviceBySN(sn,GX_ACCESS_MODE::GX_ACCESS_CONTROL);//控制方式打開//打開相機后,準備開始采集圖像//首先打開流通道CGXStreamPointer cam_stream = cam->OpenStream(0);//默認打開第一個流通道//獲取遠端屬性控制器CGXFeatureControlPointer cam_remote_control = cam->GetRemoteFeatureControl();//流通道開始采集cam_stream->StartGrab();//發送開采命令cam_remote_control->GetCommandFeature("AcquisitionStart")->Execute();//采集一幀圖像CImageDataPointer img = cam_stream->GetImage(1000);//采集超時時間ms//獲取并打印圖像寬高uint16_t height = img->GetHeight();uint16_t width = img->GetWidth();std::cout << "圖像高: " << height << "\t寬:"<<width<<"\r\n";return 0;}
2 回調方式采集圖像
#include <iostream>
#include <GalaxyIncludes.h>
using namespace std;//注意:回調函數要放在main函數之前,否則報錯//首先創建一個回調函數
//創建一個類,集成回調事件類int main()
{//對回調函數進行注冊//聲明采集回調事件的對象指針,并且創建指針對象ICaptureEventHandler* pCaptureHandler = NULL;pCaptureHandler = new MyCaptureEvent();//對相機資源進行初始化IGXFactory::GetInstance().Init();//第二部,枚舉相機//先定義一個設備列表,用來存放枚舉到的設備GxIAPICPP::gxdeviceinfo_vector cam_list;//枚舉同一網段下的相機 無ALLIGXFactory::GetInstance().UpdateDeviceList(1000,cam_list);//枚舉同一網絡下所有相機 有ALL//IGXFactory::GetInstance().UpdateAllDeviceList(1000, cam_list);//打印設備的SN碼、設備名稱、制造商//枚舉到相機后,就可以獲取到相機的一些設備信息int cam_num = cam_list.size();GxIAPICPP::gxstring sn = cam_list[0].GetSN();GxIAPICPP::gxstring id = cam_list[0].GetDeviceID();GxIAPICPP::gxstring cmpy = cam_list[0].GetVendorName();std::cout << "檢測到 " << cam_num << " 臺相機 \r\n";std::cout << "SN碼: " << sn << "\r\n";std::cout << "相機ID: " << id << "\r\n";std::cout << "制造商: " << cmpy << "\r\n";//打開相機,可以通過IP、SN、MAC、ID等唯一標識符打開相機//這里通過SN打開相機,打開相機的方式有三種: 只讀、控制、獨占CGXDevicePointer cam = IGXFactory::GetInstance().OpenDeviceBySN(sn,GX_ACCESS_MODE::GX_ACCESS_CONTROL);//控制方式打開//打開相機后,準備開始采集圖像//首先打開流通道CGXStreamPointer cam_stream = cam->OpenStream(0);//默認打開第一個流通道//獲取遠端屬性控制器CGXFeatureControlPointer cam_remote_control = cam->GetRemoteFeatureControl();//注冊回調函數cam_stream->RegisterCaptureCallback(pCaptureHandler,NULL);//流通道開始采集cam_stream->StartGrab();//發送開采命令cam_remote_control->GetCommandFeature("AcquisitionStart")->Execute();//采集一幀圖像//CImageDataPointer img = cam_stream->GetImage(1000);//采集超時時間ms//當還在采集主函數就執行完畢了,會報錯,加一個阻塞getchar();//采集完畢,停止采集,關閉相機//遠端屬性控制器發送停止命令cam_remote_control->GetCommandFeature("AcqisitionStop")->Execute();//流通道停止采集cam_stream->StopGrab();//流通道關閉cam_stream->Close();//相機關閉cam->Close();//然后釋放我們所有的相機資源IGXFactory::GetInstance().Uninit();return 0;}class MyCaptureEvent : public ICaptureEventHandler
{
public:void DoOnImageCaptured(CImageDataPointer& img, void* userparam){//獲取并打印圖像寬高uint16_t height = img->GetHeight();uint16_t width = img->GetWidth();std::cout << "圖像高: " << height << "\t寬:" << width << "\r\n";}};
//注意:回調函數要放在main函數之前,否則報錯
3 視頻教程
【大恒工業相機SDK開發C++版】初始化相機,采集第一幀圖像