1 初始化相机,采集第一帧图像
#include <iostream>
#include <GalaxyIncludes.h>
using namespace std;
int main()
{
//首先,对相机资源进行初始化
IGXFactory::GetInstance().Init();
//第二部,枚举相机//先定义一个设备列表,用来存放枚举到的设备
GxIAPICPP::gxdeviceinfo_vector cam_list;
//枚举同一网段下的相机 无ALL
IGXFactory::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;
//枚举同一网段下的相机 无ALL
IGXFactory::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函数之前,否则报错