图像的二值化处理,就是讲图像上的各点原有的连续灰度(例如0~255)置为最小(0)或最大(255),从而将一幅连续灰度变化的图象转变为一幅黑白图像,且只有黑(灰度值为0)与白(灰度值为255),也就是讲整个图像呈现出明显的黑白效果。经过二值化处理的图像,边缘轮廓非常鲜明,可以达到突出目标、淡化背景的作用,适合于处理简单的目标和逻辑判断。
图像二值化的基本方法,是先确定一个阈值,然后将所有象素点的灰度同这个阈值进行比较。若灰度大于或等于阀值,其灰度值改为255表示;反之,灰度值改为0。因此,阈值的大小对二值化的处理效果具有直接的、决定性的影响。对于同一幅图象而言,采用不同的阈值,二值化处理的结果差异极为显著。一般而言,阈值越小,二值化后图像的白色区域(亮)面积多,而黑色区域(暗)面积越少,这意味着一部分较暗的目标被改为背景。反之,阈值越大,二值化处理后的白色区域越少,而黑色区域越多,意味着部分较亮的目标被转变为背景。
灰度直方图(histogram)是灰度级的函数,它表示图象中具有每种灰度级的象素的个数,反映图象中每种灰度出现的频率。灰度直方图的横坐标是灰度级,纵坐标是该灰度级出现的频率,是图象的最基本的统计特征。
常用的阈值确定方法有:双峰法、大津法、迭代法等。其中迭代法由于具有明确的收敛性而普遍使用,其过程如下:① 选择一个初始阈值的估算值T ,比如图象灰度的均值就是一个较好的初始值;② 利用阈值T 把图像分割成两组R1和R2;③ 计算区域R1和R2的灰度均值m 1和m 2;④ 选择新的阈值T,等于区域R1和R2的均值m 1和m 2的平均值;⑤ 重复②-④步,直到均值m 1和m 2不再变化为止。
此外,数字摄像机随机提供了较为完善的应用接口库,提供的应用程序接口函数基本上概括了数字摄像机应用程序编程中涉及的各个方面。应用接口库按照模块分为应用功能模块和扩充功能模块,其中应用功能模块包括数字摄像机的控制采集图像到内存错误处理等功能扩充功能模块包括图像数据的转换等功能。在Microsoft的32位Windows操作系统中,数字摄像机应用接口库直接操作数字摄像机,并提供给用户一个简单明确的应用接口。用户在编制自己的应用程序时,可以直接调用这些库函数,来实现指定的功能。常用库函数有:
函 数:BeginHVDevice
原 型:HVSTATUS __stdcall BeginHVDevice (int nDevice,HHV *pHandle)
参 数:int nDevice:摄像机序号由1 开始。
HHV *pHandle:指向摄像机设备句柄。
返回值:调用成功,返回STATUS_OK,否则返回错误代码。
说 明:开始指定摄像机操作初始化摄像机获得其设备句柄,
分配相应的资源
函 数:EndHVDevice
原 型:HVSTATUS __stdcall EndHVDevice HHV hhv
参 数:HHV hhv:摄像机句柄
返回值:调用成功,返回STATUS_OK, 否则返回错误代码。
说 明:结束指定摄像机操作,释放其设备句柄和资源。
调用函数前必须停止摄像机工作,
如果摄像机正在采集图像时调用函数,则返回STATUS_IN_WORK。
函 数:HVSetResolution
原 型:HVSTATUS __stdcall HVSetResolution(HHV hhv,
HV_RESOLUTION resoultion);
参 数:HHV hhv:摄像机句柄。
HV_RESOLUTION resolution:图像分辨率。
返回值:调用成功,返回STATUS_OK, 否则返回错误代码。
说 明:设置摄像机的分辨率RES_MODE0 1280*1024,RES_MODE1 640*512,
RES_MODE2 320*256
函 数:HVSetOutputWindow
原 型:HVSTATUS __stdcall HVSetOutputWindow (HHV hhv, int nStartX,
int nStartY, int nWidth, int nHeight)
参 数:HHV hhv:摄像机句柄。
int nStartX:输出窗口左上角x 坐标数值应为4 的倍数。
int nStartY:输出窗口左上角y 坐标数值应为2 的倍数。
int nWidth:输出窗口宽度数值应为4 的倍数。
int nHeight:输出窗口高度数值应为2 的倍数。
返回值:调用成功,返回STATUS_OK, 否则返回错误代码。
说 明:设置图像输出Output 窗口。输出窗口是指图像数据从摄像机输出
时起始位置和大小。窗口大小只能等于或小于当前分辨率的大小。
函 数:HVSetSnapMode
原 型:HVSTATUS __stdcall HVSetSnapMode(HHV hhv,HV_SNAP_MODE mode);
参 数:HHV hhv:摄像机句柄
HV_SNAP_MODE mode:图像采集模式,CONTINUATION 连续方式,
TRIGGER 外触发方式,TRIGGER_EDGE 边缘外触发,
TRIGGER_LEVEL 电平外触发
返回值:调用成功,返回STATUS_OK, 否则返回错误代码
说 明:设置图像的采集方式
函 数:HVSetSnapSpeed
原 型:HVSTATUS __stdcall HVSetSnapSpeed (HHV hhv,
HV_SNAP_SPEED speed);
参 数:HHV hhv:摄像机句柄
HV_SNAP_SPEED speed:图像采集速度,NORMAL_SPEED 正常速度,
HIGH_SPEED 高速。
返回值:调用成功,返回STATUS_OK, 否则返回错误代码,
说 明:设置图像的采集速度。
函 数:HVSnapShot
原 型:HVSTATUS __stdcall HVSnapShot HHV hhv, BYTE**pp Buffer,
int nSum
参 数:HHV hhv:摄像机句柄。
BYTE **ppBuffer:图像数据缓冲区指针的列表。
int nSum:图像数据缓冲区数目采集图像的数量。
返回值:调用成功返回STATUS_OK 否则返回错误代码
说 明:摄像机采集若干帧图像数据到一组内存缓冲区中。图像数据缓冲区数目和大小由采集图像的数量和尺寸决定,图像的宽度高度等于当前图像输出窗口的宽度和高度,图像的大小(字节数)为:输出窗口宽*高
函 数:HVOpenSnap
原 型:HVSTATUS __stdcall HVOpenSnap (HHV hhv, HV_SNAPPROC
pSnapFunc, void *pParam)
参 数:HHV hhv:摄像机句柄。
HV_SNAPPROC pSnapFunc:指向回调函数
void *pParam:指向用户定义参数,参数对应于回调函数参数
HV_SNAP_INFO的字段pParam,它是传递给回调函
数的。
返回值:调用成功,返回STATUS_OK, 否则返回错误代码。
说 明:初始化摄像机采集图像到内存的控制,指定回调函数和用户定义的
参数,分配资源。在使用采集图像到内存的控制功能前,必须进行
初始化。用户可以在回调函数中编写自己的程序,例如图像处理
程序、控制程序等。控制功能使用完毕调用HVCloseSnap关闭。
函 数:HVCloseSnap
原 型:HVSTATUS __stdcall HVCloseSnap HHV hhv
参 数:HHV hhv:摄像机句柄
返回值:调用成功返回STATUS_OK, 否则返回错误代码。
说 明:关闭采集图像到内存的控制,释放申请的资源。
函 数:HVStartSnap
原 型:HVSTATUS __stdcall HVStartSnap (HHV hhv, BYTE **ppBuffer,
int nSum)
参 数:HHV hhv:摄像机句柄。
BYTE **ppBuffer:图像数据缓冲区指针的列表。
int nSum:图像数据缓冲区数目(采集图像的数量)。
返回值:调用成功返回STATUS_OK, 否则返回错误代码。
说 明:启动摄像机循环采集若干图像到一组内存缓冲区的功能。
图像数据缓冲区数目和大小由采集图像的数量和尺寸决定。
采集图像到内存控制的初始化成功后,启动该功能,摄像机开始循环采集图像数据到内存中,直到用户发出停止采集指令。在图像采集过程中,用户可以通过回调函数运行自己的程序,执行图像数据访问,系统控制等操作。回调函数的说明参见函数HVOpenSnap,停止摄像机采集操作调用函数HVStopSnap。
函 数:HVStopSnap
原 型:HVSTATUS __stdcall HVStopSnap HHV hhv
参 数:HHV hhv:摄像机句柄。
返回值:调用成功返回STATUS_OK, 否则返回错误代码。
说 明:停止采集图像到内存。调用函数HVStartSnap可以再次启动采集。
更为详尽的说明,请参阅《数字摄像机软件开发说明书》
|