基于1394总线的工业相机图像采集程序设计
首先,定义类CDib,并在CPictureTestDoc.h中定义共有变量:
CDibm_dib;//CDib类对象,用于位图文件的读写
然后,在CPictureTestDoc.cpp文件中添加功能函数:PictureRead(),在其中加入代码:
CStringstrPathName;
strPathName=_T(TestPicture.bmp);
if(m_dib.Read(strPathName)==TRUE)
{
SetModifiedFlag(FALSE);//startoffwithunmodified
return;
}
并在CPictureTestView.cpp文件中的OnDraw(CDC*pDC)函数中,加入如下代码:
CPictureTestDoc*pDoc=GetDocument();
CDib*pDib=pDoc->GetPDib();//返回m_dib的指针
CSizesizeFileDib=pDib->GetDimensions();//获取DIB的尺寸
pDib->Draw(pDC,CPoint(0,0),sizeFileDib);//显示DIB
在OnInitialUpdate()函数中设置滚动窗口:
CDib*pDib=pDoc->GetPDib();//获取DIB的指针
if(pDib!=NULL)
SetScrollSizes(MM_TEXT,pDib->GetDimensions());//根据DIB尺寸设置视窗大小
最后,添加图像采集命令菜单,其响应函数为:
voidCPictureTestView::OnTestStart()
{
CPictureTestDoc*pDoc=GetDocument();
pDoc->;pictureGrab();//抓图
pDoc->;pictureRead();//把图像读入内存
OnInitialUpdate();//设置滚动窗口
}
编译通过后,单击图像采集命令,即可实时获取图像。

图1图像采集实例
Fig.1Theexampleofimageacquisition
Fig.1Theexampleofimageacquisition
2.4相机设置
在图像采集时,我们往往需要对相机的参数如图像格式、分辨率、帧频等进行设定,同时,为了获取高品质图像,我们还需要做白平衡调节。当然,这些参数的设定我们可以在相机初始化时由代码实现,但是,在实际应用中,为了达到最佳效果,我们需要多次调试才能达成,如果采用修改代码的方法,调试过程会很麻烦。数码相机一般都有设置菜单,我们要做的就是,通过代码来调用相机的设置菜单,设置好参数后,参数会自动保存并加载。这样,调试的时候会方便很多。创建相机设置菜单命令,其响应函数如下:
voidCPictureTestDoc::OnTestCameraset()
{
pgrcamguiToggleSettingsWindowState(
m_guicontext,AfxGetApp()->m_pMainWnd->GetSafeHwnd());//相机设置对话框
}

图2相机参数设置界面
Fig.2Fig.4.2Interfaceforsettingtheparameterofthecamera
Fig.2Fig.4.2Interfaceforsettingtheparameterofthecamera
3结论
本文实现的图像采集系统可通过1394接口对数码机进行格式/模式/帧率的设置,光学参数的设定,采集画面的实时显示,而且能够对摄像机进行自动控制,系统稳定可靠,利用它可以完成一些复杂项目中的实时连续的图像采集过程,如高速公路车辆和车牌的自动识别管理系统、工业生产中的产品外包装检测系统等,具有很大的实用性.
评论