数字相机开发说明书

更新时间:2023-03-08 08:34:37 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

MV系列USB2.0工业数字相机开发说明书

1.2文件

1.2.1应用功能模块:

包含文件HVDAIlT.h 动态链接库HVDAIlT.dll 静态链接库HVDAIlT.lib 1.2.2扩充功能模块

包含文件Raw2RGB.h 动态链接库Raw2RGB.dll 静态链接库Raw2RGB.lib

2.1.1 定义

模块中相关常量,数据结构,宏的说明。

2.1.1.1常量

1.HHV

Typedef HANDLE HHV;

HHV 标识数字摄像机设备句柄。

数字摄像机的控制,参数设置,图像采集等,都需要使用设备句柄。

2.HVTYPE

Typedef enumtag HVTYPE{

}HVTYPE;

HVTYPE 标识当前数字摄像机的设备类型。

不同类型的数字摄像机有一些不同的硬件特性或参数,用户需要根据摄像机类型,完成 相关的操作。

3.HV_RESOLUTION

Typedef enumtag HV_RESOLUTION{

RES_MODE0=0, RES_MODE1=1, RES_MODE2=2, RES_MODE3=3 }HV_RESOLUTION;

HV_RESOLUTION 标识图像分辨率的类型。 RES_MODE0 分辨率0; RES_MODE1 分辨率1; RES_MODE2 分辨率2; RES_MODE3 分辨率3。

4.HV_SNAP_MODE

Typedef enumtag HV_SNAP_MODE{

CONTINUATION =0, TRIGGER=1,

TRIGGER_EDGE =2, TRIGGER_LEVEL=3 }HV_SNAP_MODE;

HV_SNAP_MODE 标识图像采集模式。 CONTINUATION 连续; TRIGGER 外触发;

TRIGGER_EDGE 边缘外触发,仅MV31xx系列摄像机支持; TRIGGER_LEVEL 电平外触发,仅MV31xx系列摄像机支持。

5.HV_POLARITY

Typedef enumtag HV_POLARITY {

LOW =0, HIGH =1

}HV_POLARITY;

HV_POLARITY 标识摄像机为外触发采集模式时,外触发信号的极性。 LOW 下降沿或低电平有效; HIGH 上升沿或高电平有效。

6.HV_SNAP_SPEED

Typedef enumtag HV_SNAP_SPEED{

NORMAL_SPEED=0, HIGH_SPEED=1 }HV_SNAP_SPEED;

HV_SNAP_SPEED 标识图像采集速度。 NORMAL_SPEED 正常速度采集; HIGH_SPEED 高速采集。

7.HV_CHANNEL

Typedef enumtag HV_CHANNEL{

RED_CHANNEL=0x10, GREEN_CHANNEL1=0x11, GREEN_CHANNEL2=0x12, BLUE_CHANNEL =0x13 }HV_CHANNEL;

HV_CHANNEL 标识摄像机的增益控制的颜色通道。 RED_CHANNEL 红色通道;

GREEN_CHANNEL1 绿色通道1; GREEN_CHANNEL2 绿色通道2; BLUE_CHANNEL 蓝色通道。

8.HV_ADC_CONTROL

Typedef enumtag HV_ADC_CONTROL{

ADC_BITS =0

ADC_BLKLEVEL_CAL=1,

ADC_BLKLEVEL_CAL_REDCHANNEL=0x10, ADC_BLKLEVEL_CAL_GREENCHANNEL1=0x11, ADC_BLKLEVEL_CAL_GREENCHANNEL2=0x12, ADC_BLKLEVEL_CAL_BLUECHANNEL=0x13, }HV_ADC_CONTROL;

HV_ADC_CONTROL 标识摄像机的模拟/数字转换控制方式。 ADC_BITS 模拟/数字转换级别控制;

ADC_BLKLEVEL_CAL 黑电平参数调节允许;

ADC_BLKLEVEL_CAL_REDCHANNEL 红色通道黑电平调节;

ADC_BLKLEVEL_CAL_GREENCHANNEL1 绿色通道1黑电平调节; ADC_BLKLEVEL_CAL_GREENCHANNEL2 绿色通道2黑电平调节; ADC_BLKLEVEL_CAL_BLUECHANNEL 蓝色通道黑电平调节。

9.HV_ADC_LEVEL

Typedef enumtag HV_ADC_LEVEL{

ADC_LEVEL0=0, ADC_LEVEL1=1, ADC_LEVEL2=2, ADC_LEVEL3=3 }HV_ADC_LEVEL;

HV_ADC_LEVEL 标识模拟/数字转换级别。 ADC_LEVEL0 0级,10位数据取低7位有效; ADC_LEVEL0 1级,10位数据取低8位有效; ADC_LEVEL2 2级,10位数据取中间8位有效; ADC_LEVEL3 3级,10位数据取高8位有效。

10.HV_AEC_CONTROL

Typedef enumtag HV_AEC_CONTROL{

AEC_EXPOSURE_TIME=1, AEC_SHUTTER_SPEED=2, AEC_SHUTTER_UNIT=3 }HV_AEC_CONTROL;

HV_AEC_CONTROL 标识摄像机曝光控制方式。 AEC_EXPOSURE_TIME 曝光系数; AEC_SHUTTER_SPEED 快门速度; AEC_SHUTTER_UNIT 快门速度单位。

11.HV_SHUTTER_UNIT

Typedef enumtag HV_SHUTTER_UNIT{

SHUTTER_US=0, SHUTTER_MS=1, }HV_SHUTTER_UNIT;

HV_SHUTTER_UNIT 标识摄像机快门速度的单位。 SHUTTER_US 微秒; SHUTTER_MS 毫秒

12.HV_MIRROR_DIRECTION

Typedef enumtag HV_MIRROR_DIRECTION {

VERT_DIR=1, Hor_DIR=2, Full_DIR=3

}HV_MIRROR_DIRECTION;

HV_MIRROR_DIRECTION 标识图像采集的镜像功能。 VERT_DIR 垂直方向。 Hor_DIR 水平方向。 Full_DIR 全方向。

13.HV_COMMAND_CODE

Typedef enumtag HV_COMMAND_CODE{

CMD_SET_STROBE_SIGNAL_MODE =0x25, CMD_SET_EXPOSURE_MODE =0x26,

CMD_SET_ROW_NOISECORR_CONTROL=0x27, CMD_HVAPI_CONTROL =0x100 }HV_COMMAND_CODE;

HV_COMMAND_CODE 标识摄像机的控制功能。

CMD_SET_STROBE_SIGNAL_MODE 控制闪光灯信号模式的功能码 CMD_SET_EXPOSURE_MODE 控制曝光模式的功能码

CMD_SET_ROW_NOISECORR_CONTROL 控制行噪声校正开关的功能码 CMD_HVAPI_CONTROL 执行HV_CONTROL_CODE定义的功能。

14.HV_DEVICE_INFO

Typedef enumtag HV_DEVICE_INFO {

DESC_DEVICE_TYPE=0, DESC_RESOLUTION =1, DESC_DEVICE_MARK=2,

DESC_DEVICE_SERIESNUM=3, DESC_DEVICE_BLANKSIZE=4,

DESC_DEVICE_HARDWARE_VERSION=6, DESC_DEVICE_BAYER_LAYOUT =11 }HV_DEVICE_INFO;

HV_DEVICE_INFO 标识摄像机的信息。 DESC_DEVICE_TYPE 摄像机的设备类型; DESC_RESOLUTION 摄像机的分辨率; DESC_DEVICE_MARK 摄像机类型的标志;

DESC_DEVICE_SERIESNUM 摄像机的序列号; DESC_DEVICE_BLANKSIZE 消隐的取值范围;

DESC_DEVICE_HARDWARE_VERSION 摄像机的设备(硬件)版本号。 DESC_DEVICE_BAYER_LAYOUT 摄像机图像Bayer格式

15.HV_CONTROL_CODE

Typedef enumtag HV_CONTROL_CODE{

ORD_QUERY_LAST_STATUS_PRESENCE=0x0000000C, ORD_GET_LAST_STATUS =0x0000000E }HV_CONTROL_CODE;

HV_CONTROL_CODE,列举函数HVCommand的命令控制码CMD_HVAPI_CONTROL执行的功能。

ORD_QUERY_LAST_STATUS_PRESENCE用于查询是否支持,获取摄像机的工作状态;

ORD_GET_LAST_STATUS用于获取摄像机的工作状态。

16.HV_LAST_STATUS

Typedef enumtag HV_LAST_STATUS{

HV_LAST_STATUS_ERROR_CONTROL=0, HV_LAST_STATUS_SNAP =1,

HV_LAST_STATUS_TRANSFER =2 }HV_LAST_STATUS;

HV_LAST_STATUS列举摄像机工作状态类型。 HV_LAST_STATUS_ERROR_CONTROL

摄像机控制操作错误码,调用控制函数返回错误值时,使用ORD_GET_LAST_STATUS获取的详细错误信息;

HV_LAST_STATUS_SNAP

摄像机采集图像操作状态码,实时采集图像时,查询摄像机采集状态; HV_LAST_STATUS_TRANSFER

摄像机采集图像操作状态码,实时采集图像时,在用户定义的回调函数中使用,查询 摄像机采集状态。

17.HV_SIGNAL_TYPE

Typedef enumtag HV_SIGNAL_TYPE{

SIGNAL_IMPULSE=0, SIGNAL_LEVEL =1 }HV_SIGNAL_TYPE;

HV_SIGNAL_TYPE列举摄像机闪光灯信号的模式。 SIGNAL_IMPULSE 脉冲信号 SIGNAL_LEVEL 电平信号

18.HV_EXPOSURE_MODE

Typedef enumtag HV_EXPOSURE_MODE{

SEQUENCE=0, SIMULTANEITY=1

}HV_EXPOSURE_MODE;

HV_EXPOSURE_MODE列举摄像机的曝光模式。 SEQUENCE 顺序模式

SIMULTANEITY 同时模式 19.HV_NOISECORR_CONTROL

Typedef enumtag HV_NOISECORR_CONTROL{

NOISECORR_ENABLE=0, NOISECORR_DISABLE=1 }HV_NOISECORR_CONTROL;

HV_NOISECORR_CONTROL列举摄像机的噪声校正控制开关。 NOISECORR_ENABLE 噪声校正控制开启 NOISECORR_DISABLE 噪声校正控制关闭

2.1.1.2结构

1.HV_SANP_INFO

Typedef structtag HV_SANP_INFO{

HHV hhv; Int nDevice; Int nIndex; Void *pParam; }HV_SNAP_INFO;

HV_SNAP_INFO 结构包含执行采集图像到内存的操作中,摄像机的工作状态。在连续采集图像到内存的过程中,标示当前工作的摄像机设备,图像数据缓冲区的序号和用户定义的参数。 成员

hhv 标示当前工作的摄像机的句柄。

nDevice 标示当前工作的摄像机的序号(从1开始)。

nIndex 标示当前摄像机采集的图像数据缓冲区的序号(从0开始)。 pParam 指向用户定义的参数。

2.HV_SNAPPROC

Typedef int(CALLBACK*HV_SNAPPROC)(HV_SNAP_INFO*pInfo);

HV_SNAPPROC标示回调函数的声明。在采集图像到内存控制程序中,用户定义回调函数,在函数体中编写自己的程序,如,图像数据的处理等。使用函数HVOpenSnap注册回调函数,由摄像机采集控制程序调用。

3.HV_CHECK_PARAM

Typedef structtag HV_CHECK_PARAM{

BYTE byParam1; BYTE byParam2; BYTE byParam3; BYTE byParam4; }HV_CHECK_PARAM;

HV_CHECK_PARAM 结构包含给定的摄像机查验参数。 成员:

byParam1 参数1。 byParam2 参数2。 byParam3 参数3。 byParam4 参数4。

4.HVAPI_CONTROL_PARAMETER

Typedef structtag HVAPI_CONTROL_PARAMETER{

HV_CONTROL_CODE code; void *pInBuf;

DWORD dwInBufSize; void *pOutBuf;

DWORD dwOutBufSize; DWORD *pBytesRet;

}HVAPI_CONTROL_PARAMETER;

HVAPI_CONTROL_PARAMETER结构用于CMD_HVAPI_CONTROL功能的输入输出参数。 成员:

Code功能码,参见HV_CONTROL_CODE,

其它成员pInBuf,dwInBufSize,pOutBuf,dwOutBufSize和pBytesRet描述code的参数,每个功能都有各自对应的输入输出参数;

pInBuf 指向输入缓冲区,如果code指明的操作不需要输入参数,pInBuf设置为NULL; dwInBufSize 输入缓冲区大小,单位:字节,如果code指明的操作不需要输入参数,dwInBufSize设置为0;

pOutBuf 指向输出缓冲区,如果code指明的操作不需要输出参数,pOutBuf设置为NULL;

dwOutBufSize 输出缓冲区大小,单位:字节,如果code指明的操作不需要输入参数,dwOutBufSize设置为0;

pBytesRet 指向一个DWORD变量,接收pOutBuf 中实际输出的数据大小,单位:字节,如果输出缓冲区太小,

HVCommand函数返回STATUS_NOT_ENOUGH_SYSTEM_MEMORY,并且pBytesRet为0。

5.HV_RES_QUERY_LAST_STATUS_PRESENCE

Typedef structtag HV_RES_QUERY_LAST_STATUS_PRESENCE{

DWORD:29;

DWORD Transfer :1; DWORD Snap :1; DWORD Control :1;

}HV_RES_QUERY_LAST_STATUS_PRESENCE;

HV_RES_QUERY_LAST_STATUS_PRESENCE结构用于

ORD_QUERY_LAST_STATUS_PRESENCE的输出参数,描述是否支持,获取摄像机的工作状态。 成员

Transfer 标示是否支持在用户定义的回调函数中获取摄像机采集图像操作状态码; Snap 标示是否支持获取摄像机采集图像操作状态码; Control 标示是否支持,获取摄像机控制操作错误码。

6.HV_ARG_GET_LAST_STATUS

Typedef structtag HV_ARG_GET_LAST_STATUS{

HV_LAST_STATUS type;

}HV_ARG_GET_LAST_STATUS;

HV_ARG_GET_LAST_STATUS结构用于ORD_GET_LAST_STATUS的输入参数,描述要获取的摄像机工作状态类型。 成员

type 摄像机工作状态类型,参见HV_LAST_STATUS。

7.HV_RES_GET_LAST_STATUS

Typedef structtag HV_RES_GET_LAST_STATUS{

DWORD status;

}HV_RES_GET_LAST_STATUS;

HV_RES_GET_LAST_STATUS结构用于ORD_GET_LAST_STATUS的输出参数,描述摄像机工作状态。 成员

status 标识摄像机工作状态码或错误码。

8.HV_SIGNAL_MODE

Typedef structtag HV_SIGNAL_MODE{

Int Polarity;//0:LOW;1:HIGH

Int Mode; //0:SIGNAL_IMPULSE;1:SIGNAL_LEVEL }HV_SIGNAL_MODE;

HV_SIGNAL_MODE结构用于设置摄像机闪光灯信号的模式和极性。 成员

Polarity 标识摄像机闪光灯信号的极性。 Mode 标示摄像机闪光灯信号的模式。

2.1.1.3宏

1.HV_SUCCESS

BOOL HV_SUCCESS (status)

HV_SUCCESS宏检查函数执行的返回状态。 参数:

HVSTATUSstatus; 函数执行的返回状态。

返回值:标识函数执行结果,成功为TRUE;失败为FALSE。 注释:HV_SUCCESS在HVDef.h中的定义如下,

#defineHV_SUCCESS(status)((status)==STATUS_OK)

2.HV_VERIFY

HV_VERIFY (status)

HV_VERIFY宏校验函数执行是否成功。HV_VERIFY宏只在调试(DEBUG)版的执行程序中运行,函数执行成功,不显示信息;函数执行不成功,则弹出对话框,显示错误信息。在发布(RELEASE)版的执行程序中不运行,也不产生任何代码。 参数:

HVSTATUSstatus; 函数执行的返回状态。 注释:

HV_VERIFY在HVDef.h中的定义如下, #if def_DEBUG

#defineHV_VERIFY(status)\\ if((status)!=STATUS_OK){\\ ::MessageBox (NULL,\\ HVGetErrorString(status),\\

\,MB_ICONWARNING|MB_OK);\\ } #else

#defineHV_VERIFY(status)(status) #endif

2.1.2 函数说明

2.1.2.1数字摄像机的控制

数字摄像机的开始(初始化)、结束,设置分辨率、图像窗口、采集模式等。

1.函数:BeginHVDevice //初始化摄像机,获得其设备句柄,分配相应的资源。

原型:HVSTATUS__stdcall BeginHVDevice(int nDevice,HHV *pHandle)

参数:

Int nDevice; 摄像机序号,由1开始。 HHV *pHandle; 指向摄像机设备句柄。

返回值:调用成功,返回STATUS_OK,否则返回错误代码。

说明:开始指定摄像机操作,初始化摄像机,获得其设备句柄,分配相应的资源。 输入参数nDevice 是摄像机的逻辑序号,按照维视数字摄像机序列,如MV1300UC、

MV2000UC?MVxxx等,由低到高排列确定,同一型号设备按所连接USB接口序号排列。例如:

用户系统中有3支MV1300UC,按USB接口序号,则摄像机的序号分别为1、2、3。如果nDevice的值超过当前系统实际的摄像机数,则返回STATUS_NO_DEVICE_FOUND。 调用函数

HVGetDeviceInfo //可以确定当前摄像机类型。

EndHVDevice //摄像机使用完毕,调用函数EndHVDevice结束。

范例:如果系统中安装了两支或两支以上的摄像机,则可以按下面调用得到每支摄像机的 设备句柄。

BeginHVDevice(1,&hDevice1);//打开摄像机1 BeginHVDevice(2,&hDevice2);//打开摄像机2 ??? ???? //类推?

参看:EndHVDevice,HVGetDeviceInfo。

2.函数:EndHVDevice //结束指定摄像机操作,释放其设备句柄和资源

原型:HVSTATUS__stdcall EndHVDevice(HHVhhv) 参数:

HHVhhv; 摄像机句柄。

返回值:调用成功,返回STATUS_OK,否则返回错误代码。 说明:结束指定摄像机操作,释放其设备句柄和资源。

调用函数前,必须停止摄像机工作,如果摄像机正在采集图像时调用函数,则返回 STATUS_IN_WORK。

范例:EndHVDevice (hDevice1);//关闭摄像机1

EndHVDevice(hDevice2);//关闭摄像机2 参看:BeginHVDevice。

3.函数:HVSetResolution //设置摄像机的分辨率

原型:HVSTATUS__stdcall HVSetResolution(HHV hhv,HV_RESOLUTION resoultion); 参数:

HHVhhv; 摄像机句柄。

HV_RESOLUTIONresolution; 图像分辨率。

返回值:调用成功,返回STATUS_OK,否则返回错误代码。

说明:设置摄像机的分辨率,MV13xxUx系列摄像机的分辨率:RES_MODE0--1280*1024,

RES_MODE1--640*512,RES_MODE2--320*256。

MV20xxUx系列摄像机的分辨率:RES_MODE0--1600*1200,RES_MODE1--800*600,RES_MODE2--400*300。

MV31xxUx系列摄像机的分辨率:RES_MODE0--2048*1536,RES_MODE1--1024*768,RES_MODE2--640*480,RES_MODE3--512*384。

有关摄像机分辨率的信息,参见函数HVGetDeviceInfo。 范例:HVSetResolution (hDevice1,RES_MODE1); 参看:HVSetOutputWindow。

4.函数:HVSetOutputWindow //设置图像输出(Output)窗口

原型:HVSTATUS__stdcall HVSetOutputWindow(HHV hhv,int nStartX,int nStartY, Int nWidth,int nHeight) 参数:

HHVhhv; 摄像机句柄。

intnStartX; 输出窗口左上角x坐标,数值应为4的倍数。 intnStartY; 输出窗口左上角y坐标,数值应为2的倍数。 intnWidth; 输出窗口宽度,数值应为4的倍数。 intnHeight; 输出窗口高度,数值应为2的倍数。

返回值:调用成功,返回STATUS_OK,否则返回错误代码。

说明:设置图像输出(Output)窗口,输出窗口是指图像数据从摄像机输出时的起始位置 和大小。输出窗口大小只能等于或小于当前分辨率的大小。需要特别说明的是摄像机MV400Ux,在调节窗口时,需要满足条件: nWidth*rate+HorizontalBlanking+0x5e>0x294 rate取值:

分辨率Mode0:rate=1;Mode1:rate=2

范例:HVSetOutputWindow (hDevice1,0,0,640,512); 参看:HVSetResolution。

5.函数:HVSetBlanking //设置摄像机的消隐值,

原型:HVSTATUS__stdcallHVSetBlanking(HHVhhv,intnHor,intnVert); 参数:

HHVhhv; 摄像机句柄。 intnHor; 行消隐值。 intnVert; 场消隐值。

返回值:调用成功,返回STATUS_OK,否则返回错误代码。

说明:设置摄像机的消隐值,消隐的取值范围通过函数HVGetDeviceInfo得到,请参考 HVGetDeviceInfo函数说明。

范例:HVSetBlanking(hDevice1,20,0);

6.函数:HVSetSnapMode //设置图像的采集方式。

原型:HVSTATUS__stdcallHVSetSnapMode(HHVhhv,HV_SNAP_MODEmode); 参数:

HHVhhv; 摄像机句柄。

HV_SNAP_MODEmode; 图像采集模式: CONTINUATION连续方式; TRIGGER 外触发方式;

TRIGGER_EDGE边缘外触发;

TRIGGER_LEVEL电平外触发。

返回值:调用成功,返回STATUS_OK,否则返回错误代码。 说明:设置图像的采集方式。

范例:HVSetSnapMode(hDevice1,CONTINUATION);

仅MV31xxUx摄像机支持TRIGGER_EDGE和TRIGGER_LEVEL两种模式。

7.函数:HVSetTriggerPolarity //设置外触发信号的极性。

原型:HVSTATUS__stdcallHVSetTriggerPolarity(HHVhhv,HV_POLARITYpolarity); 参数:

HHVhhv; 摄像机句柄。

HV_POLARITYpolarity; 外触发信号的极性: LOW 下降沿或低电平有效; HIGH上升沿或高电平有效。

返回值:调用成功,返回STATUS_OK,否则返回错误代码。

说明:当摄像机为外触发模式采集图像时,设置外触发信号的极性。 范例:HVSetTriggerPolarity(hDevice1,LOW);

8.函数:HVSetStrobePolarity //设置摄像机输出的闪光灯信号的极性。

原型:HVSTATUS__stdcallHVSetStrobePolarity(HHVhhv,HV_POLARITYpolarity); 参数:

HHVhhv; 摄像机句柄。

HV_POLARITYpolarity; 闪光灯信号的极性: LOW下降沿或低电平有效; HIGH上升沿或高电平有效。

返回值:调用成功,返回STATUS_OK,否则返回错误代码。 说明:设置摄像机输出的闪光灯信号的极性。 范例:HVSetStrobePolarity(hDevice1,LOW);

9.函数:HVSetSnapSpeed //设置图像的采集速度

原型:HVSTATUS__stdcallHVSetSnapSpeed(HHVhhv,HV_SNAP_SPEEDspeed); 参数:

HHVhhv; 摄像机句柄。

HV_SNAP_SPEEDspeed; 图像采集速度: NORMAL_SPEED正常速度; HIGH_SPEED高速。

返回值:调用成功,返回STATUS_OK,否则返回错误代码。

说明:设置图像的采集速度,例如MV1300UC,MV1300UM,分辨率为1280*1024时,高速 采集为15fps,正常速度采集时为7.5fps;MV2000UC分辨率为1600*1200时,高速采集为10fps,正常速度采集时为5fps;MV3000UC分辨率为2048*1536时,高速采集为6fps,正常速度采集时为3fps。

范例:HVSetSnapMode(hDevice1,NORMAL_SPEED);

10.函数:HVEnableVideoMirror //设置采集图像的垂直方向镜像功能。

原型:HVSTATUS__stdcall HVEnableVideoMirror(HHVhhv,HV_MIRROR_DIRECTION dir,BOOLbEnable) 参数:

HHVhhv;摄像机句柄。

HV_MIRROR_DIRECTIONdir; 图像采集的镜像方向。

BOOLbEnable; TRUE允许,FALSE 禁止。

返回值:调用成功,返回STATUS_OK,否则返回错误代码。 说明:设置采集图像的垂直方向镜像功能。

部分摄像机同时支持垂直、水平和完全镜像,其他摄像机都只支持垂直镜像。

11.函数:HVADCControl //摄像机的模拟/数字转换A/D控制。

原型:HVSTATUS__stdcallHVADCControl(HHVhhv,BYTEbyParam,longlValue); 参数:

HHVhhv; 摄像机句柄。 BYTEbyParam; 控制参数, ADC_BITS模拟/数字转换级别;

ADC_BLKLEVEL_CAL 黑电平参数调节允许;

ADC_BLKLEVEL_CAL_REDCHANNEL 红色通道黑电平调节;

ADC_BLKLEVEL_CAL_GREENCHANNEL1绿色通道1黑电平调节; ADC_BLKLEVEL_CAL_GREENCHANNEL2绿色通道2黑电平调节; ADC_BLKLEVEL_CAL_BLUECHANNEL蓝色通道黑电平调节; longlValue; 参数值,设置模拟数字转换级别,取值, ADC_LEVEL0; ADC_LEVEL1; ADC_LEVEL2; ADC_LEVEL3。

设置黑电平参数调节允许,取值, TRUE允许;FALSE 禁止。 设置黑电平参数,取值, -255到255。

返回值:调用成功,返回STATUS_OK,否则返回错误代码。 说明:摄像机的模拟/数字转换控制。

12.函数:HVAGCControl //摄像机的自动增益控制。

原型:HVSTATUS__stdcallHVAGCControl(HHVhhv,BYTEbyParam,longlValue); 参数:

HHVhhv; 摄像机句柄。 BYTEbyParam; 控制参数,

AGC_GAIN_RED_CHANNEL 红通道增益调节;

AGC_GAIN_GREEN_CHANNEL1 绿通道1增益调节; AGC_GAIN_GREEN_CHANNEL2 绿通道2增益调节; AGC_GAIN_BLUE_CHANNEL 蓝通道增益调节; longlValue; 增益大小,

MV-51系列摄像机增益0-63。其他MV系列摄像机分通道的增益调节取值,0-127。 返回值:调用成功,返回STATUS_OK,否则返回错误代码。 说明:摄像机的自动增益控制。

13.函数:HVAECControl //摄像机的自动曝光控制。

原型:HVSTATUS__stdcallHVAECControl(HHVhhv,BYTEbyParam,longlValue); 参数:

HHVhhv摄像机句柄。

BYTEbyParam; 控制参数,

AEC_EXPOSURE_TIME曝光系数; AEC_SHUTTER_SPEED快门速度; AEC_SHUTTER_UNIT快门速度单位; longlValue; 参数值,

功能AEC_SHUTTER_UNIT取值:

HV_SHUTTER_UNIT的类型,SHUTTER_US 微秒;SHUTTER_MS 毫秒。 AEC_SHUTTER_SPEED 和AEC_SHUTTER_UNIT的值决定摄像机的快门速度:最小值20微秒,最大值1秒。

返回值:调用成功,返回STATUS_OK,否则返回错误代码。 说明:摄像机的自动曝光控制。

MV 系列摄像机通过曝光系数来设置摄像机的曝光时间,曝光系数与曝光时间的换算方法, 参见相关MV系列摄像机的使用说明书中“1.2 摄像机的快门”的内容。 范例:为摄像机设置16ms曝光时间 //方法1:

HVAECControl(hhv,AEC_SHUTTER_SPEED,16);

HVAECControl(hhv,AEC_SHUTTER_UNIT,SHUTTER_MS); //方法2:

计算曝光系数dExposure

HVAECControl(hhv,AEC_EXPOSURE_TIME,dExposure);

14.函数:HVCommand 数字摄像机的操作命令函数

原型:

HVSTATUS__stdcall HVCommand(HHV hhv,HV_COMMAND_CODE CommandCode,void *pContext, int *pLength); 参数:

HHVhhv; 摄像机句柄。

HV_COMMAND_CODECommandCode;功能代码:

CMD_SET_STROBE_SIGNAL_MODE 控制闪光灯信号模式的功能码 CMD_SET_EXPOSURE_MODE 控制曝光模式的功能码

CMD_SET_ROW_NOISECORR_CONTROL控制行噪声校正开关的功能码 CMD_HVAPI_CONTROL 执行HV_CONTROL_CODE定义的功能; void*pContext; 指向实现功能所需参数的缓冲区。其中,功能:

CMD_SET_STROBE_SIGNAL_MODE 参数为结构HV_SIGNAL_MODE; CMD_SET_EXPOSURE_MODE 参数为枚举类型HV_EXPOSURE_MODE; CMD_SET_ROW_NOISECORR_CONTROL参数为枚举类型HV_NOISECORR_CONTROL

CMD_HVAPI_CONTROL参数为结构HVAPI_CONTROL_PARAMETER; int*pLength; 参数缓冲区的大小,以字节为单位。其中,功能: CMD_SET_STROBE_SIGNAL_MODE 参数缓冲区是8字节; CMD_SET_EXPOSURE_MODE 参数缓冲区是4字节;

CMD_HVAPI_CONTROL 参数缓冲区是24字节。

返回值:调用成功,返回STATUS_OK,否则返回错误代码。

说明:数字摄像机的操作命令函数,通过指定不同的功能代码,执行各种摄像机的操作。 其中,功能代码:

CMD_HVAPI_CONTROL

执行HV_CONTROL_CODE定义的功能,ORD_QUERY_LAST_STATUS_PRESENCE,具体调用方法可

参照范例1;ORD_GET_LAST_STATUS,具体调用方法可参照范例2。 范例:

//范例1:查询是否支持,获取摄像机的工作状态

HV_RES_QUERY_LAST_STATUS_PRESENCE ResFeature; HVAPI_CONTROL_PARAMETER p; p.pInBuf =NULL; p.dwInBufSize=0;

p.pOutBuf=&ResFeature;

p.dwOutBufSize=sizeof(ResFeature); p.pBytesRet =NULL;

p.code=ORD_QUERY_LAST_STATUS_PRESENCE; intdwSize=sizeof(p);

HVSTATUSstatus=HVCommand(hhv,CMD_HVAPI_CONTROL,&p,&dwSize); //范例2:获取摄像机的采集状态

HV_ARG_GET_LAST_STATUS ArgFeature;

ArgFeature.type=HV_LAST_STATUS_TRANSFER; HV_RES_GET_LAST_STATUS ResFeature; HVAPI_CONTROL_PARAMETER p; p.pInBuf =&ArgFeature;

p.dwInBufSize=sizeof(ArgFeature); p.pOutBuf =&ResFeature;

p.dwOutBufSize=sizeof(ResFeature); p.pBytesRet =NULL;

p.code =ORD_GET_LAST_STATUS; int dwSize=sizeof(p);

HVCommand(hhv,CMD_HVAPI_CONTROL,&p,&dwSize); if(ResFeature.status==0)

{// 当状态值等于0时,表示摄像机图像采集正常 }

elseif(ResFeature.status==STATUS_FILE_INVALID)

{ // 当状态值不等于-18时,表示摄像机发生1次丢帧行为,在连续高速采集时, 1次丢帧行为可能包括1帧以上图像。 }

elseif(This->dwLastStatus==0xc0000012||This->dwLastStatus==0xc0000011)

{//此类传输错误能够自动恢复,不需要用户自己处理,用户可以通过查询此类错误, 来累计发生错误的次数 }

Else

{// 当状态值为其他非0值时,表示摄像机图像采集异常 }

//范例3:用于设置闪光灯输出信号

//闪光灯只有在触发采集状态下,才能输出有效信号 //正脉冲信号

strobe.Mode =SIGNAL_IMPULSE; strobe.Polarity=HIGH;

HVCommand(hhv,CMD_SET_STROBE_SIGNAL_MODE,&strobe,&nSize); //负脉冲信号

strobe.Mode =SIGNAL_IMPULSE; strobe.Polarity=LOW;

HVCommand(hhv,CMD_SET_STROBE_SIGNAL_MODE,&strobe,&nSize); //高电平信号

strobe.Mode =SIGNAL_LEVEL; strobe.Polarity=HIGH;

HVCommand(hhv,CMD_SET_STROBE_SIGNAL_MODE,&strobe,&nSize); //低电平信号

strobe.Mode =SIGNAL_LEVEL; strobe.Polarity=LOW;

HVCommand(hhv,CMD_SET_STROBE_SIGNAL_MODE,&strobe,&nSize);

2.1.2.2采集图像到内存

图像数据传输到计算机的内存中,用户可以对内存中的数据进行处理,也可以利用位图函 数将图像显示在计算机的屏幕上。

1.函数:HVSnapShot //摄像机采集若干帧图像数据到一组内存缓冲区中

原型:HVSTATUS__stdcall HVSnapShot (HHV hhv, BYTE **ppBuffer, int nSum) 参数:

HHV hhv; 摄像机句柄。

BYTE **ppBuffer; 图像数据缓冲区指针的列表。

Int nSum; 图像数据缓冲区数目(采集图像的数量)。 返回值:调用成功,返回STATUS_OK,否则返回错误代码。

说明:摄像机采集若干帧图像数据到一组内存缓冲区中。图像数据缓冲区数目和大小由采 集图像的数量和尺寸决定,图像的宽度、高度等于当前图像输出窗口的宽度和高度,图像的大小(字节数)为:输出窗口宽×高。参见HVSetOutputWindow的函数说明。 范例:// 采集两幅图像到内存

//图像数据缓冲区的大小由图像的输出窗口决定 BYTE Buffer1[800*600]//第一幅图像的缓冲区 BYTE Buffer2[800*600]//第二幅图像的缓冲区 BYTE *ppBuffer[2];//图像数据缓冲区指针的列表 ppBuffer[0]=Buffer1; ppBuffer[1]=Buffer2;

HVSnapShot(hhv, ppBuffer, 2);

2.函数:HVOpenSnap //初始化摄像机采集图像到内存的控制

原型:HVSTATUS__stdcall HVOpenSnap(HHV hhv,HV_SNAPPROC pSnapFunc,void *pParam) 参数:

HHVhhv; 摄像机句柄。

HV_SNAPPROC pSnapFunc;指向回调函数。

Void *pParam; 指向用户定义参数,参数对应于回调函数参数HV_SNAP_INFO的 字段 pParam,它是传递给回调函数的。

返回值:调用成功,返回STATUS_OK,否则返回错误代码。

说明:初始化摄像机采集图像到内存的控制,指定回调函数和用户定义的参数,分配资源。 在使用采集图像到内存的控制功能前,必须进行初始化。

用户可以在回调函数中编写自己的程序,例如图像处理程序、控制程序等。

通过回调函数定义的参数HV_SNAP_INFO,可以获得当前工作的摄像机的句柄、序号、图像缓冲区序号和用户定义的参数信息。

控制功能使用完毕,调用HVCloseSnap关闭。 参见:HVCloseSnap。

3.函数:HVCloseSnap

原型:HVSTATUS__stdcall HVCloseSnap(HHV hhv) 参数:

HHV hhv; 摄像机句柄。

返回值:调用成功,返回STATUS_OK,否则返回错误代码。 说明:关闭采集图像到内存的控制,释放申请的资源。 参见:HVOpenSnap。

4.函数:HVStartSnap //启动采集。

原型:HVSTATUS__stdcallHVStartSnap(HHV hhv,BYTE **ppBuffer,intnSum) 参数:

HHV hhv; 摄像机句柄。

BYTE **ppBuffer; 图像数据缓冲区指针的列表。 Int nSum; 图像数据缓冲区数目(采集图像的数量)。

返回值:调用成功,返回STATUS_OK,否则返回错误代码。

说明:启动摄像机循环采集若干图像到一组内存缓冲区的功能。图像数据缓冲区数目和大 小由采集图像的数量和尺寸决定。采集图像到内存控制的初始化成功后,启动该功能,摄像机开始循环采集图像数据到内存中,直到用户发出停止采集指令。在图像采集过程中,用户可以通过回调函数运行自己的程序,执行图像数据访问,系统控制等操作。回调函数的说明参见函数HVOpenSnap。停止摄像机采集操作,调用函数HVStopSnap。 参见:HVStopSnap。

5.函数:HVStopSnap //停止采集图像到内存。

原型:HVSTATUS__stdcall HVStopSnap(HHV hhv) 参数:

HHV hhv; 摄像机句柄。

返回值:调用成功,返回STATUS_OK,否则返回错误代码。

说明:停止采集图像到内存。调用函数HVStartSnap可以再次启动采集。 参见:HVStartSnap。

6.函数:HVTriggerShot //触发方式采集一帧图像数据到内存。

原型:HVSTATUS__stdcall HVTriggerShot(HHV hhv) 参数:HHV hhv; 摄像机句柄。

返回值:调用成功,返回STATUS_OK,否则返回错误代码。

说明:摄像机通过触发方式采集一帧图像数据到内存。使用该功能时,先要调用函数

HVSetSnapMode将摄像机设置为外触发方式,然后调用函数HVStartSnap打开摄像机采集图像。

参见:HVSetSnapMode,HVStartSnap。

7.函数:HVWaitSync //等待同步信号

原型:HVSTATUS__stdcall HVWaitSync(HHV hhv) 参数:

HHV hhv; 摄像机句柄。

返回值:调用成功,返回STATUS_OK,否则返回错误代码。

说明:等待同步信号。同步信号的到来表示视频信号一帧的开始,函数返回时正是一帧的 开始,在需要控制图像的帧数时,可以通过调用该函数实现。 范例:HVWaitSync (hDevice1);

2.1.2.3错误处理

对系统运行状态和函数调用返回值的处理。 1.函数:HVGetErrorString

原型:char*__stdcall HVGetErrorString(HVSTATUS status) 参数:

HVSTATUS status; 错误代码。

返回值:返回指向错误代码说明的字符串指针。 说明:根据输入的错误代码,返回相应的说明。

2.1.2.4其它功能

一些附加的软/硬件应用功能。

1.函数:HVGetDeviceTotal //获取当前系统中摄像机的总数。

原型:HVSTATUS__stdcall HVGetDeviceTotal(int *pNumber) 参数:

Int *pNumber; 指向摄像机的总数。

返回值:调用成功,返回STATUS_OK,否则返回错误代码。 说明:获取当前系统中摄像机的总数。

2.函数:HVGetDeviceInfo //读取摄像机的信息

原型:HVSTATUS__stdcallHVGetDeviceInfo(HHVhhv,HV_DEVICE_INFO Param,void *pContext, int *pSize) 参数:

HHVhhv; 摄像机句柄。

HV_DEVICE_INFOParam; 摄像机的信息。 void*pContext; 指向存放信息的缓冲区。 int*pSize; 信息数据的大小,以字节为单位。

返回值:调用成功,返回STATUS_OK,否则返回错误代码。

说明:读取摄像机的信息,包括设备类型、类型标识、序列号、分辨率、消隐的取值范围、 图像的Bayer格式等。其中获取图像Bayer格式的功能只有MV400Ux系列摄像机支持。 要获得摄像机的信息,首先要获得信息数据的大小,调用该函数,信息缓冲区的指针 pContext可为“NULL”,通过pSize获得信息数据的大小(以字节为单位)。使用pSize 的值申请存放信息的缓冲区,再次调用函数就可获得相应的设备信息了。 设备类型的值参见常量HVTYPE的定义。类型标识由2个字节组成, MV1300UC的板型为“V0” MV1301UC的板型为“U0”, MV2000UC的板型为“U1” MV2001UC的板型为“U2”, MV3000UC的板型为“U3” MV1300UM的板型为“U4”, MV1302UC 的板型为“U5”, MV2002UC 的板型为“U6”, MV3102UC的板型为“U7”, MV1302UM的板型为“U8”, MV1303UC的板型为“U9”, MV2003UC的板型为“UB”, MV3103UC的板型为“UC”, MV1303UM 的板型为“UD”, MV1350UC 的板型为“S0”, MV2050UC的板型为“S1”, MV3150UC的板型为“S2”, MV1350UM的板型为“S3”, MV1351UC的板型为“S4”, MV2051UC的板型为“S5”, MV3151UC的板型为“S6”, MV1351UM 的板型为“S7”。

序列号由12个字节组成,每个摄像机都有唯一的序列号。

摄像机分辨率的值为无符号整数类型(DWORD),分辨率以宽和高为一组,按数值由高到低排列,MV13xxUx系列摄像机的分辨率有1280*1024,640*512,320*256。 MV20xxUx系列摄像机的分辨率有1600*1200,800*600,400*300。

MV30xxUx系列摄像机的分辨率有2048*1536,1024*768,640*480,512*384。 消隐的取值范围由16个字节组成4个DWORD,由第0个DWORD开始分别是:

行消隐的最小取值,场消隐的最小取值,行消隐的最大取值,场消隐的最大取值。 摄像机的设备(硬件)版本号由2个字节组成,可用无符号的短整形数表示。 范例: //范例1

Int nBuffSize=0;

//首先要获得信息数据的大小

HVGetDeviceInfo(hhv,DESC_RESOLUTION,NULL,&nBuffSize); //再次调用函数获得设备分辨率的信息

BYTE *pbContext=newBYTE[nBuffSize]; DWORD *pdContext=(DWORD*)pbContext;

HVGetDeviceInfo(hhv,DESC_RESOLUTION,pdContext,&nBuffSize); //获得当前分辨率输出窗口的最大尺寸 //Resolution为摄像机当前分辨率

nMaxWidth=*(pdContext+2*Resolution); nMaxHeight=*(pdContext+2*Resolution+1); delete[]pbContext; //范例2

//获得消隐的取值范围 DWORDpBlankSize[4]; intnBufSize=0; intnHmin=0; intnVmin=0; intnHmax=2047; intnVmax=2047;

HVGetDeviceInfo(DESC_DEVICE_BLANKSIZE,NULL,&nBufSize); HVGetDeviceInfo(DESC_DEVICE_BLANKSIZE,pBlankSize,&nBufSize); nHmin=(int)pBlankSize[0]; nVmin=(int)pBlankSize[1]; nHmax=(int)pBlankSize[2]; nVmax=(int)pBlankSize[3];

3. 函数:HVCheckDevice

原型:HVSTATUS__stdcall HVCheckDevice(HHV hhv,HV_CHECK_PARAM Param,BOOL *pStatus) 参数:

HHV hhv; 摄像机句柄。 HV_CHECK_PARAM Param;查验参数,参数的定义参见HV_CHECK_PARAM结构说明。 这些参数由摄像机制造商提供。

3.附录

3.1函数返回值代码表 STATUS_OK 0 成功

STATUS_NO_DEVICE_FOUND -1 没有发现摄像机 STATUS_DEVICE_HANDLE_INVALID -2 句柄无效 STATUS_HW_DEVICE_TYPE_ERROR -3 设备类型错误 STATUS_HW_INIT_ERROR -4 硬件初始化错误 STATUS_HW_RESET_ERROR -5 硬件复位错误

STATUS_NOT_ENOUGH_SYSTEM_MEMORY -6 没有足够系统内存 STATUS_HW_IO_ERROR -7 IO初始化错误

STATUS_HW_IO_TIMEOUT -8 硬件IO读写超时 STATUS_HW_ACCESS_ERROR -9 硬件访问错误 STATUS_OPEN_DRIVER_FAILED -10 装载驱动失败 STATUS_NOT_SUPPORT_INTERFACE -11 不支持该接口 STATUS_PARAMETER_INVALID -12 参数无效

STATUS_PARAMETER_OUT_OF_BOUND -13 参数越界 STATUS_IN_WORK -14 正在采集,不能执行该操作

STATUS_NOT_OPEN_SNAP -15 采集到内存控制没有初始化 STATUS_NOT_START_SNAP -16 采集到内存没有启动 STATUS_FILE_CREATE_ERROR -17 创建文件失败 STATUS_FILE_INVALID -18 文件格式无效

STATUS_NOT_START_SNAP_INT -19 内部传输没有启动 STATUS_INTERNAL_ERROR -20 内部错误

图象处理函数参考

StretchDIBits

该函数将DIB中矩形区域内像素使用的颜色数据拷贝到指定的目标矩形中。如果目标矩形比源矩形大小要大,那么函数对颜色数据的行和列进行拉伸,以与目标矩形匹配。如果目标矩形大小要比源矩形小,那么该函数通过使用指定的光栅操作对行列进行压缩。 函数原型

int StretchDIBits(HDC hdc, int XDest , int YDest , int nDestWidth, int nDestHeight, int XSrc, int Ysrc, int nSrcWidth, int nSrcHeight, CONST VOID *lpBits, CONST BITMAPINFO * lpBitsInfo, UINT iUsage, DWORD dwRop); 参数

hdc:指向目标设备环境的句柄。 XDest:指定目标矩形左上角位置的X轴坐标,按逻辑单位来表示坐标。 YDest:指定目标矩形左上角的Y轴坐标,按逻辑单位表示坐标。 nDestWidth:指定目标矩形的宽度。 nDestHeight:指定目标矩形的高度。

XSrc:指定DIB中源矩形(左上角)的X轴坐标,坐标以像素点表示。 YSrc:指定DIB中源矩形(左上角)的Y轴坐标,坐标以像素点表示。 nSrcWidth:按像素点指定DIB中源矩形的宽度。 nSrcHeight:按像素点指定DIB中源矩形的高度。

lpBits:指向DIB位的指针,这些位的值按字节类型数组存储,有关更多的信息,参考下面的备注一节。

lpBitsInfo:指向BITMAPINFO结构的指针,该结构包含有关DIB方面的信息。

iUsage:表示是否提供了BITMAPINFO结构中的成员bmiColors,如果提供了,那么该bmiColors是否包含了明确的RGB值或索引。参数iUsage必须取下列值,这些值的含义如下:

DIB_PAL_COLOR:表示该数组包含对源设备环境的逻辑调色板进行索引的16位索引值。

DIB_RGB_COLORS:表示该颜色表包含原义的KGB值,若想了解更多的信息,请参考下面备注一节。

dwRop:指定源像素点、目标设备环境的当前刷子和目标像素点是如何组合形成新的图像。若想了解更多信息,请参考下面的备注一节。

返回值:如果函数执行成功,那么返回值是拷贝的扫描线数目,如果函数执行失败,那么返回值是GDI_ERROR。

备注:自底向上的DIB的起始点为左下角,自顶向下DIB的起始点为左上角。

如果nSrcWidth和nDestWidth参数的符号不同。或是nSrcHeight和nDesHeight参数的符号不同。那么函数StretchDIBits将创建位图的镜像。如果NsrcWidth和NdestWidth符号不同,那么函数将沿着X轴创建位图镜像。如果NsrcHeight和NdestHeight符号不同,那么函数将沿着Y轴创建位图镜像。

对于Windows 98、Windows NT 5.0及以后版本:该函数允许将JPEG图像用作源图像,每个参数如何使用其实仍是一样的。

如果BITMAPINFOHEADER结构中的成员biCompression为BI_JPEG,那么参数lpBits指向的是一个包含JPEG图像的缓冲区。BITMAPINFOHEADER结构中的biSizeImage成员指定了该缓冲区的大小。参数iUsage必须设为DIB_RGB_COLORS。dwRop必须设为SRCCOPY。

为确保打印时可以有正确的图元文件假脱机操作。应用程序应在调用StretchDIBits函数之前调用CHECKJPEGFORMAT转义符,以确认打印机识别JPEG图像。

ICM:执行颜色管理。如果指定的BITMAPINFO结构中的bmiHeader不包含BITMAPV4HEADER或BITMAPV5HEADER,那么当前设备环境的颜色配置(profile)被用作源颜色配置(profile)。如果没有颜色档案,那么就使用RGB。如果指定的BITMAPINFO结构中的成员bmiHeader包含了

BITMAPV4HEADER或BITMAPV5HEADER,那么将把位图标头中指定的颜色配置(profile)用作源颜色配置。

本文来源:https://www.bwwdw.com/article/kzv3.html

Top