Qt 编程使用Sapera LT API 实现盖革雪崩焦平面相机数据采集

InGaAs 盖革雪崩焦平面相机采用激光脉冲飞行时间测量( TOF)方式获取目标的三维距离信息,可应用于激光制导、障碍规避、三维地形测绘等领域。它通过 Cameralink连线进行数据输出,控制命令接口是串口 RS-232。通过 DALSA 公司 Camlink 图像采集卡对 InGaAs 盖革雪崩焦平面相机进行数据采集。由于其提供的是基于MFC的是VC++的Demo,无法直接用于QT环境。下面给出基于QT的数据采集的基本实现。
 

SapAcquisition *	CL_Acquisition = NULL;
SapBuffer *		CL_Buffers = NULL;
SapTransfer *	CL_Transfer = NULL;
SapLocation * pLocLft;
SapAcqToBuf * pTransferLft;

HANDLE  hEvent_for_data_process; //用于数据采集事件
//初始化
Init()
{
    //"Xcelera-CL_LX1_1"为相机标识。L_No_Name_0_0.ccf是配置文件,可用demo生成
    CL_Acquisition = new SapAcquisition(SapLocation("Xcelera-CL_LX1_1", 0), "L_No_Name_0_0.ccf");	

    CL_Buffers = new SapBuffer(Counter_CacheMini, SIZE_ALL, Size_CacheMini, SapFormatMono16);

    //XferCallback 为定义的因调函数
    CL_Transfer = new SapAcqToBuf(CL_Acquisition, CL_Buffers, XferCallback, this);


    if (!CreateObjects())
    {
	    QMessageBox::information(NULL, "注意!", "无法建立合适的数据采集连接,请检察采集设备是否安装?程序将退出!!!"); 
		exit(0);
    }
}


//下面是CreateObjects()函数
CreateObjects()
{
	// Create acquisition object
	if (CL_Acquisition && !*CL_Acquisition && !CL_Acquisition->Create())
	{
		DestroyObjects();
		return FALSE;
	}

	CL_Acquisition->SetParameter(CORACQ_PRM_CROP_HEIGHT, Size_CacheMini);
	CL_Acquisition->SetParameter(CORACQ_PRM_SCALE_VERT, Size_CacheMini);


	// Create buffer object
	if (CL_Buffers && !*CL_Buffers && !CL_Buffers->Create())
	{
		DestroyObjects();
		return FALSE;
	}
	else
		CL_Buffers->Clear();

	// Create transfer object
	if (CL_Transfer && !*CL_Transfer && !CL_Transfer->Create())
	{
		DestroyObjects();
		return FALSE;
	}

	return TRUE;
}


下面是DestroyObjects()函数
DestroyObjects()
{
	// Destroy transfer object
	if (CL_Transfer && *CL_Transfer)
		CL_Transfer->Destroy();

	// Destroy buffer object
	if (CL_Buffers && *CL_Buffers)
		CL_Buffers->Destroy();

	// Destroy acquisition object
	if (CL_Acquisition && *CL_Acquisition)
		CL_Acquisition->Destroy();

	return TRUE;
}
//回调函数
XferCallback(SapXferCallbackInfo *)
{
	PulseEvent(hEvent_for_data_process); //触发一次数据处理
}

//图像数据采集及存贮线程,相机数据读入pData_Buffer中
Read_Data_Thread(void * ptr)//数据读取、保存线程
{
	while (hEvent_for_data_process != NULL)
	{
		WaitForSingleObject(hEvent_for_data_process, INFINITE); // 等待处理指令

		index_cache = CL_Buffers->GetIndex();
		if (!CL_Buffers->GetAddress(index_cache, (void **)&pData_Buffer))
			continue;
		CL_Buffers->GetTrash();

		}
	}
	ResetEvent(hEvent_for_data_process);
	return;
}

 首先初始化并获取采集卡操作对像,通过创键SapAcqToBuf对像,关连回调函数,这样一旦有数据就会自动执行回调函数,在回调函数中发出事件信息,使等待该事件的采集线程执行数据采集。执行init后,要通过控制口(即Rs232串口)进行各参数的设置,其操作就是基本的串口通信,比较简单这里就不给出相应代码了。当然采集到数据后还要进行一系列的处理,最后可在屏幕显示相应的距离像或强度像。由于代码较多,这里不再给出。

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

frankgy01

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值