Dalsa Frame grabber高电平采集可变行高实现方法
一、应用场景
在工业视觉检测的应用中,线扫相机能得到单帧图像的最大行高取决于采集卡芯片以及缓存的限制。当我们需要拍摄的行高需要更大时,可以使用可变行高—高电平连续采集模式。首先我们可以使用帧触发高电平连续采集模式,但=但是如果使用固定行高,不能得到最后不满一帧的图片,这样会导致损失数据。所以我们需要使用可变行高—高电平连续采集模式。
二、采集卡端设置
Active High:External Trigger 高电平为有效信号开始采集,高电平结束停止采集;
Active Low:External Trigger 低电平为有效信号开始采集,低电平结束停止采集;
Dual Input Trigger Rising Edge:External Trigger两个上升沿为有效信号,第一个开始采集第二个停止采集;
Dual Input Trigger Faling Edge:External Trigger两个下降沿为有效信号,第一个开始采集第二个停止采集;
Case1:Internal Line Trigger + Active High + Valiable length
Case2:Shaft Encoder Trigger + Active High + Valiable length
三、硬件演示简介
为了演示效果更明显将光源直接对着Sensor,那么每采集一行都是灰度值255。
例如,內触发行频设置为100K,行高设置为50000。帧触发设置为1HZ占空比为75%。理论计算最后每秒钟的图片应该是两张,第一张是全图(打光后全白),第二张是采集了25000行(一半白一半黑)。
四、sapera自动存图代码
在回调函数里面添加以下自动存储代码,获取时间信息,获取Buffer索引序列信息Buffer->Getindex() ,获取当前图片的数量信息count。
void CGrabDemoDlg::XferCallback(SapXferCallbackInfo *pInfo)
{
CGrabDemoDlg *pDlg= (CGrabDemoDlg *) pInfo->GetContext();
if (pInfo->IsTrash())
{
CString str;
str.Format(_T("Frames acquired in trash buffer: %d"), pInfo->GetEventCount());
pDlg->m_statusWnd.SetWindowText(str);
}
else
{
if (enablesave == true)
{
SYSTEMTIME t;
GetLocalTime(&t);
CString str;
if (saveformat == 0)
{
str.Format(_T("%s\\%d-%d-%d-%d-%d-%d-%d-%d-%d.bmp"), FilePathName, t.wYear, t.wMonth, t.wDay, t.wHour, t.wMinute, t.wSecond, t.wMilliseconds, count++, pDlg->m_Buffers->GetIndex());
pDlg->m_Buffers->Save(CStringA(str), "-format bmp", -1, 0);
}
if (saveformat == 1)
{
str.Format(_T("%s\\%d-%d-%d-%d-%d-%d-%d-%d-%d.jpg"), FilePathName, t.wYear, t.wMonth, t.wDay, t.wHour, t.wMinute, t.wSecond, t.wMilliseconds, count++, pDlg->m_Buffers->GetIndex());
pDlg->m_Buffers->Save(CStringA(str), "-format jpg -q 90", -1, 0);
}
}
pDlg->m_View->Show();
}
// Refresh view
}