MIL即为Matrox Imaging Library的缩写,是加拿大Matrox公司提供的图像处理函数库,主要是针对其公司生产的Matrox系列图像采集卡。
MatroxMorphis四通路图像采集卡
几个常用的函数如下:
MappAllocDefault();一个默认的配置,Application、System、Digitizer、Display、Buffer都是按照默认的情况进行配置。
MappAlloc();分配一个MIL应用,该函数要在使用其它MIL函数之前使用。
MsysAlloc();配置一个硬件环境,指定使用得板卡类型,使用板卡序号。该函数要在分配buffer,display,digitizer前使用。
MdigAlloc();配置一个抽象的图像采集卡,指定可以使用的采集卡通道数,然后才能使用图像采集卡的函数。
MdispAlloc();配置一个display,把摄像机采集的图像使用该抽象进行显示。
MbufAlloc2d();分配一个2维的内存区。
MbufAllocColor();分配彩色内存区。
MappControl();改变指定的MIL应用的属性。
MsysControl();改变指定的系统的属性。
MdigControl();改变指定的图采卡属性。
MdispControl();改变指定的显示属性
MappInquire();获取指定的应用配置情况
MsysInquire();获取指定的应用系统情况
MdigInquire();获取指定的采集卡配置情况
MdispInquire();获取指定的显示配置情况
MbufInquire();获取指定内存块的配置情况
我使用的MatroxMorphis有四个通路,现在有两个摄像机需要采集数据。黑白摄像机在插在0通路,为CCIR机制;彩色摄像机插在1通路,为PAL机制。
目前最广泛的标准视频是
黑白:RS—170,使用在北美、日本、台湾等地区; CCIR,使用在欧洲、中国等地区。
彩色:NTSC,使用在北美、日本、台湾等地区; PAL,使用在欧洲、中国等地区。
下面分别采集两个摄像机视频数据程序的核心地方
0通路的黑白摄像机
MIL_ID MilApplication ;
MIL_ID MilSystem ;
MIL_ID MilDigitizer ;
MIL_ID MilDisplay ;
MIL_ID MilImageDisp ;
MIL_ID MilImage ;
MappAlloc(M_DEFAULT,&MilApplication);
MsysAlloc(M_SYSTEM_MORPHIS,M_DEV0,M_COMPLETE,&MilSystem);
MdigAlloc(MilSystem,M_DEV0,"M_DEFAULT",M_DEFAULT,&MilDigitizer);
MdispAlloc(MilSystem,M_DEFAULT,"",M_DEFAULT,&MilDisplay);
g_BufSizeX = ((unsigned int) MdigInquire(MilDigitizer, M_SIZE_X, M_NULL));
g_BufSizeY = ((unsigned int) MdigInquire(MilDigitizer, M_SIZE_Y, M_NULL));
MbufAlloc2d( MilSystem, ImageWidth, ImageHeight,8+M_UNSIGNED,
M_IMAGE+M_GRAB+M_PROC, &MilImage);
MbufAlloc2d( MilSystem, ImageWidth, ImageHeight,8+M_UNSIGNED,
M_IMAGE+M_DISP,&MilImageDisp);
MbufClear( MilImageDisp, 0 );
int n=100;
while(n--)
{
MdigGrab(MilDigitizer, MilImage8[0]);
MbufCopy(MilImage8[0],MilImageDisp);
}
MdispDeselect(MilDisplay, MilImageDisp);
MbufFree(MilImageDisp);
MbufFree(MilImage);
MdispFree(MilDisplay);
MdigFree(MilDigitizer);
MsysFree(MilSystem);
MappFree(MilApplication);
1通路的彩色摄像机
MIL_ID ColorMilApplication ;
MIL_ID ColorMilSystem ;
MIL_ID ColorMilDigitizer ;
MIL_ID ColorMilDisplay ;
MIL_ID ColorMilImageDisp ;
MIL_ID ColorMilImage ;
MappAlloc(M_DEFAULT,&ColorMilApplication);
MsysAlloc(M_SYSTEM_MORPHIS,M_DEV0,M_COMPLETE,&ColorMilSystem);
MdigAlloc(ColorMilSystem,M_DEV0,
"C:\\Program Files\\MatroxImaging\\Drivers\\Morphis\\dcf\\PAL.DCF" ,
M_DEFAULT,&ColorMilDigitizer);
MdigChannel(ColorMilDigitizer,M_CH1);//默认的通路为0,改为1通路
MdispAlloc(ColorMilSystem,M_DEFAULT,"",M_DEFAULT,&ColorMilDisplay);
long SizeBand = MdigInquire(ColorMilDigitizer,M_SIZE_BAND, M_NULL);
longSizeX =MdigInquire(ColorMilDigitizer, M_SIZE_X, M_NULL);
longSizeY =MdigInquire(ColorMilDigitizer, M_SIZE_Y, M_NULL);
MbufAllocColor(ColorMilSystem, SizeBand,SizeX, SizeY, 8L+M_UNSIGNED,
M_IMAGE + M_DISP + M_NON_PAGED,&ColorMilImageDisp);
MbufClear(ColorMilImageDisp,M_BLACK);MbufAllocColor(ColorMilSystem, SizeBand, SizeX, SizeY,8L+M_UNSIGNED,
M_IMAGE + M_GRAB + M_ON_BOARD,&ColorMilImage);
int k=100;
while(k--)
{
MdigGrab(ColorMilDigitizer,ColorMilImage);
MbufCopy(ColorMilImage8[0],ColorMilImageDisp);
}
MbufFree(ColorMilImageDisp);
MbufFree(ColorMilImage);
MdispFree(ColorMilDisplay);
MdigFree(ColorMilDigitizer);
MsysFree(ColorMilSystem);
MappFree(ColorMilApplication);
今天学习了如何对图像采集卡采集的每一帧图像进行图像处理,主要是从MIL的数据结构中读出图像的具体到像素的数据。SizeX为图像的长度,SizeY为图像的宽度,SizeBand为图像的颜色通道数。从读出的数据分析可以知道,具体图像像素数据是从上到下,从作到右存储的。
unsigned char *data=new unsignedchar[SizeX*SizeBand*SizeY];
unsigned char red=0,green=0,blue=0;
int k=10;//连续采集的10帧图像
int i,j;
while(k--)
{
MdigGrab(ColorMilDigitizer,ColorMilImage8[0]);
MbufGetColor(ColorMilImage8[0],M_PACKED+M_BGR24,M_ALL_BANDS,data);
for(i=0;i<SizeY/2;i++)
for(j=0;j<SizeX*SizeBand;j+=SizeBand)
{
blue=*(data+i*SizeX*SizeBand+j+0);
green=*(data+i*SizeX*SizeBand+j+1);
red=*(data+i*SizeX*SizeBand+j+2);
}
MbufPutColor(ColorMilImage8[0],M_PACKED+M_BGR24,M_ALL_BANDS,data);
MbufCopyColor(ColorMilImage8[0],ColorMilImageDisp,M_ALL_BANDS);
}
delete data;