大恒图像HV2051UCML&&opencv


//------------------------2.1打开设备-------------------------//
/*
HVSTATUS 相机状态 = BeginHVDevice( int 相机编号, &相机句柄);
*/
HHV hhv = NULL;//相机设备句柄
int nDevIndex = 1;//相机编号 ,相机1
HVSTATUS status = BeginHVDevice(nDevIndex,&hhv);//打开设备
HV_VERIFY(status);//检验函数执行状态,如果失败,则返回错误状态消息框

 

//------------------------2.2关闭设备-------------------------//
/*
HVSTATUS 相机状态 = BeginHVDevice( 相机句柄);
*/
HVSTATUS status = EndHVDevice(hhv);//关闭设备
HV_VERIFY(status);//检验函数执行状态,如果失败,则返回错误状态消息框

 

//------------------------2.3获取设备总数-------------------------//

int nDeviceCount = 0;   //设备总数变量
HVSTATUS status = HVGetDeviceTotal(&nDeviceCount);
HV_VERIFY(status);//检验函数执行状态,如果失败,则返回错误状态消息框

 

//------------------------2.4获取设备信息-------------------------//
/*
使用接口HVGetDeviceInfo可获取设备信息
包括: 设备类型、 类型标识、 序列号、 分辨率、 消隐 的取值范围、图像的 Bayer 格式等;
其中获取图像Bayer格式的功能只有GV400系列、HV5051系列摄像机支持。
*/

//------------------------2.4.1获取设备型号-------------------------//
int size = sizeof(HVTYPE);//size为int类型,存储并指示 设备型号类型HVTPYE 的字节大小
HVTYPE type;//设备型号类型HVTPYE变量 type
HVSTATUS status = HVGetDeviceInfo(hhv,DESC_DEVICE_TYPE, &type, &size);
// HVSTATUS 相机状态 =HVGetDeviceInfo( 相机句柄, 获取参数类型, &设备型号, &字节长度);
HV_VERIFY(status);//检验函数执行状态,如果失败,则返回错误状态消息框

//------------------------2.4.2获取分辨率-------------------------//
int size = 0;
//获取信息数据的大小,size/(2*sizeof(DWORD))即为支持的视频模式数目
//?
HVSTATUS status = HVGetDeviceInfo(hhv,DESC_RESOLUTION, NULL, &size);
HV_VERIFY(status);//检验函数执行状态,如果失败,则返回错误状态消息框

//再次调用获得设备分辨率信息
BYTE *pbContext = new BYTE[size];//用来存储信息数据
//信息数据转为DWORD格式指针--->HVGetDeviceInfo接收DWORD格式指针
DWORD *pdContext = (DWORD *)pbContext;
//再次调用获得设备分辨率信息
HVSTATUS status = HVGetDeviceInfo(hhv,DESC_RESOLUTION, pdContext, &size);
HV_VERIFY(status);//检验函数执行状态,如果失败,则返回错误状态消息框

// 获得当前分辨率输出窗口的最大尺寸,Res为摄像机当前分辨率
nMaxWidth = *(pdContext + 2 * Res);//最大宽度
nMaxHeight = *(pdContext + 2 * Res + 1);//最大高度
delete []pbContext;
pbContext = NULL;
//Res?

//------------------------2.4.3获取设备序列号-------------------------//
//先获取序列号字节长度
int nSize = 0; //设备序列号长度
status=HVGetDeviceInfo(hhv,DESC_DEVICE_SERIESNUM,NULL, &nSize);
HV_VERIFY(status);

//获取序列号信息并存贮在pSerialNum中
BYTE  * pSerialNum = new BYTE[nSize];
status = HVGetDeviceInfo(hhv, DESC_DEVICE_SERIESNUM, pSerialNum, &nSize);
HV_VERIFY(status);

//输出序列号
printf(“Serial Number is %s\n”, pSerialNum); //设备序列号
//清理内存
if (pSerialNum!=NULL)
{
    delete []pSerialNum;
    pSerialNum = NULL;
}


//------------------------2.4.4获取消隐范围-------------------------//
//消隐范围??
/*
行消隐(HBlank)在将光信号转换为电信号的扫描过程中,
扫描总是从图像的左上角开始,水平向前行进,同时扫描点也以较慢的速率向下移动。
当扫描点到达图像右侧边缘时,扫描点快速返回左侧,
重新开始在第1行的起点下面进行第2行扫描,行与行之间的返回过程称为水平消隐。

一幅完整的图像扫描信号,由水平消隐间隔分开的行信号序列构成,称为一帧。
扫描点扫描完一帧后,要从图像的右下角返回到图像的左上角,开始新一帧的扫描,
这一时间间隔,叫做垂直消隐,也称场消隐(VBlank)。
*/
int nBufSize = 4 * sizeof(DWORD);
DWORD pBlankSize[4] = {0};
// 获得消隐的取值范围
status = HVGetDeviceInfo(hhv, DESC_DEVICE_BLANKSIZE, pBlankSize, &nBufSize);
HV_VERIFY(status);
//获得相应消隐范围
int nHmin = (int)pBlankSize[0];
int nVmin = (int)pBlankSize[1];
int nHmax = (int)pBlankSize[2];
int nVmax = (int)pBlankSize[3];

//------------------------2.4.5获取固件版本-------------------------//
//获取固件版本数据字节长度
int nSize = 0;
status = HVGetDeviceInfo(hhv, ESC_DEVICE_HARDWARE_VERSION, NULL, &nSize);

//获取固件版本
BYTE  * pHWVersion= new BYTE[nSize];
Status = HVGetDeviceInfo(hhv, DESC_DEVICE_HARDWARE_VERSION, pHWVersion,&nSize);
HV_VERIFY(status);

//打印固件版本并清理内存
printf(“Hardware Version is %s\n”, pHWVersion); //固件版本
if (pHWVersion!=NULL)
{
    delete []pHWVersion;
    pHWVersion= NULL;
}

//------------------------2.4.6获取Bayer类型-------------------------//
/*
Bayer类型:
*/
//获取Bayer类型字节长度
int nSize = 0;
status = HVGetDeviceInfo(hhv, DESC_DEVICE_BAYER_LAYOUT, NULL,&nSize);
//获取Bayer类型信息
BYTE  * pBayerLayout = new BYTE[nSize];
status = HVGetDeviceInfo(hhv, DESC_DEVICE_BAYER_LAYOUT, pBayerLayout, &nSize);
HV_VERIFY(status);
//确定Bayer类型信息并清理内存
int nBayerType = *pBayerLayout; //Bayer类型为整型,须转换
if (pBayerLayout!=NULL)
{
    delete []pBayerLayout;
    pBayerLayout = NULL;
}

//------------------------2.5打开采集-------------------------//
// HVSTATUS 相机状态 =HVOpenSnap( 相机句柄, 回调函数, this指针);
// this指针?


//声明回调函数
static int CALLBACK SnapCallback(HV_SNAP_INFO *pInfo);

//注册回调函数
HVSTATUS status = HVOpenSnap(hhv, SnapCallback, this);
HV_VERIFY(status);

//实现回调函数
int CALLBACK SnapCallback(HV_SNAP_INFO *pInfo)
{
    //用户在此回调内进行图像处理及其它操作。
    //Process Image
    //...
    return 1;
}

//------------------------2.6关闭采集-------------------------//
// HVSTATUS 相机状态 =HVCloseSnap(相机句柄);
HVSTATUS status = HVCloseSnap(m_hhv);  //关闭采集
HV_VERIFY(status);

 //------------------------2.7 开始采集-------------------------//
 /*
 HVSTATUS __stdcall HVStartSnap
 (HHV hhv,BYTE **ppBuffer, int nSum)
 参  数:
HHV hhv 摄像机句柄。
BYTE **ppBuffer  图像数据缓冲区指针的列表。
Int nSum 图像数据缓冲区数目(采集图像的数量)。
返回值:调用成功,返回STATUS_OK,否则返回错误代码。
 */
 
 //分配图像缓冲区
BYTE *m_pRawBuffer;
m_pRawBuffer = new BYTE[1280*1024];//分配图像缓冲区
//分配缓存失败
if(m_pRawBuffer==NULL)
{
   //错误处理...
}

//定义HVStartSnap接受的参数
//BYTE指针数组,指向对应的缓存区,
BYTE * ppBuffer[1];//
ppBuffer[0] = m_pRawBuffer;
status = HVStartSnap(m_hhv,ppBuffer,1); //采集图像到内存
HV_VERIFY(status);

//------------------------2.8 停止采集-------------------------//
// HVSTATUS 相机状态 =HVStopSnap(相机句柄);
HVSTATUS status = HVStopSnap(m_hhv); //停止采集
HV_VERIFY(status);

//------------------------2.9 采单(或多)帧-------------------------//
/*
HVSTATUS __stdcall HVSnapShot
(HHV hhv, BYTE **ppBuffer, int nSum)
参  数:
HHV hhv             摄像机句柄。
BYTE **ppBuffer;   图像数据缓冲区指针的列表。
Int nSum;          图像数据缓冲区数目(采集图像的数量)。
返回值:
调用成功,返回STATUS_OK,否则返回错误代码。
说  明:
摄像机采集若干帧图像数据到一组内存缓冲区中。
图像数据缓冲区数目和大小由采集图像的数量和尺寸决定,
图像的宽度、高度等于当前图像输出窗口的宽度和高度,
图像的大小(字节数)为:输出窗口宽 × 高。
参见HVSetOutputWindow的函数说明。
注意:采单(或多)帧功能与连续采集功能
(HVOpenSnap、HVStartSnap、HVStopSnap和HVCloseSnap)不能同时使用。


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)窗口,输出窗口是指图像数据从摄像机输出时的起始位置和大小。
输出窗口大小只能等于或小于当前分辨率的大小。
注:设置图像窗口前,需要先停止采集。
范  例:HVSetOutputWindow(hDevice1,0,0,640,512);
*/

//采集一幅图像到内存
BYTE *m_pRawBuffer = new BYTE[1628*1236]; //图像缓冲区
BYTE * ppBuffer[1];
ppBuffer[0] = m_pRawBuffer;
HVSTATUS status= HVSnapShot(m_hhv,ppBuff,1); //采集一帧图像到内存
HV_VERIFY(status);

//采集两幅图像到内存
// 图像数据缓冲区的大小由图像的输出窗口决定
BYTE Buffer1[800 * 600] // 第一幅图像的缓冲区
BYTE Buffer2[800 * 600] // 
BYTE *ppBuffer[2]; //图像数据缓冲区指针的列表
ppBuffer[0] = Buffer1;
ppBuffer[1] = Buffer2;
HVSTATUS status = HVSnapShot(hhv, ppBuffer, 2);
HV_VERIFY(status);

 //------------------------2.10 软触发命令 -------------------------//
HVSTATUS status = HVTriggerShot(hhv); //软触发命令
HV_VERIFY(status);

//------------------------2.11设置图像分辨率-------------------------//
/*
HVSTATUS __stdcall HVSetResolution(HHV hhv, HV_RESOLUTION esolution);
参  数:
HHV hhv;摄像机句柄。
HV_RESOLUTION resolution;图像分辨率。
返回值:调用成功,返回STATUS_OK,否则返回错误代码。
说  明:设置摄像机的分辨率
HV20xxUx系列摄像机的分辨率:RES_MODE0 1600×1200,RES_MODE1 800×600,RES_MODE2 400×300。
注:设置分辨率前,需要先停止采集。修改分辨率后要重新设置输出窗口。
*/

// 设置视频模式(分辨率)。
HVSTATUS status = STATUS_OK;
status = HVSetResolution(hhv,RES_MODE0);
HV_VERIFY(status);

// 重新设置输出窗口,调整为当前模式下的宽高。
Status = HVSetOutputWindow(hhv,0,0,1280,1024); //调整图像窗口大小及位置。
HV_VERIFY(status);

//------------------------2.13图像数据格式-------------------------//
/*
图像数据格式指摄像机输出的图像格式,如Raw8、Mono 8、Raw12,Mono12等。
需要根据相应摄像机的用户使用说明书来确认摄像机支持的图像数据格式。
使用不同的数据格式,在开辟图像缓冲区、解析图像数据等方面可能有所不同。
*/


//------------------------2.14采集速度-------------------------//
/*
通过接口HVSetSnapSpeed可以设置设备的采集速度,分为高速和低速两种模式
*/
HVSTATUS status = STATUS_OK;   
HV_SNAP_SPEED SnapSpeed = HIGH_SPEED;
//设置采集速度
status = HVSetSnapSpeed(m_hhv, SnapSpeed);
HV_VERIFY(status);


//------------------------2.15采集模式-------------------------//
/*
采集模式通过HVSetSnapMode 进行设置,参数为HV_SNAP_MODE类型;
CONTINUATION            连续模式
TRIGGER                 外触发模式
TRIGGER_EDGE            边缘外触发模式;仅HV31xx系列和HV5051系列摄像机支持
TRIGGER_LEVEL           全局复位(GRR)电平外触发模式;仅HV31xx系列和HV5051系列摄像机支持
TRIGGER_LEVEL_STANDARD  电子滚动快门(ERS)电平外触发模式;仅HV5051系列摄像机支持
*/
HVSTATUS status = STATUS_OK;
status = HVSetSnapMode(hhv,CONTINUATION);//连续采集
HV_VERIFY(status);

//------------------------2.16获取相机工作状态-------------------------//
/*
USB摄像机可查询的工作状态包括:
Transfer,摄像机采集图像操作状态码(只在用户定义的回调函数中获取);
Snap,摄像机采集图像操作状态码;
Control,摄像机控制操作错误码。
*/

//用户可以通过结构体“HV_RES_QUERY_LAST_STATUS_PRESENCE”查询摄像机支持的状态码
//范例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;
int dwSize = sizeof(p);
HVSTATUS status = HVCommand( hhv, CMD_HVAPI_CONTROL, &p, &dwSize);
HV_VERIFY(status);


//用户可在回调函数中获取摄像机采集图像操作状态码,从而判断当前采集状态是否正确
//范例2:在回调函数中获取摄像机的采集状态
int CALLBACK CmainFrame::SnapThreadCallback(HV_SNAP_INFO *pInfo)
{
    CmainFrame *This = (CmainFrame *)(pInfo->pParam);
    //获取摄像机的采集状态
    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);
    HVSTATUS status = HVCommand( hhv, CMD_HVAPI_CONTROL, &p, &dwSize);
    HV_VERIFY(status);

    if(ResFeature.status == 0)
    {
        // 当状态值等于0时,表示摄像机图像采集正常
        // 用户图像处理……
    }
    else if(ResFeature.status == STATUS_FILE_INVALID)
    {
        // 当状态值不等于-18时,表示摄像机发生1次丢帧行为
        // 在连续高速采集时,1次丢帧行为可能包括1帧以上图像。
    }
    else if (This->dwLastStatus==0xc0000012
    || This-> dwLastStatus==0xc0000011)
    {
        // 此类传输错误能够自动恢复,不需要用户自己处理
        // 用户可以通过查询此类错误,来累计发生错误的次数
    }
    else
    {
        // 当状态值为其他非0值时,表示摄像机图像采集异常
    }
}

//------------------------2.20快门控制-------------------------//
/*
HVSTATUS __stdcall HVAECControl(HHV hhv, BYTE byParam, long lValue);
参  数:
HHV hhv;        摄像机句柄。
BYTE byParam;   控制参数,包括:
    AEC_EXPOSURE_TIME 曝光系数;
    AEC_SHUTTER_SPEED 快门速度;
    AEC_SHUTTER_UNIT 快门速度单位;
long lValue;    参数值,
    功能AEC_SHUTTER_UNIT取值类型为
    HV_SHUTTER_UNIT:
        SHUTTER_US 微秒;
        SHUTTER_MS 毫秒。
    功能AEC_SHUTTER_SPEED和功能AEC_SHUTTER_UNIT的值决定摄像机的快门速度。
返回值:调用成功,返回STATUS_OK,否则返回错误代码。
说  明:摄像机的曝光控制。
HV系列摄像机通过曝光系数来设置摄像机的曝光时间,
曝光系数的计算方法,参见相关HV系列摄像机的使用说明书中 “1.2 摄像机的快门”的内容。
GV400Ux和HV-51Ux系列摄像机可直接通过设置快门速度和单位来设置摄像机的曝光时间,
而不需要用户自己去计算曝光系数。

当外部光源为日光或直流光源时,HV系列USB接口摄像机对曝光时间无特殊要求;
当外部光源为交流光源时,曝光时间需与外部光源同步
(50Hz光源条件下曝光时间必须是1/100s的整倍数,60Hz光源条件下曝光时间必须是1/120s的整倍数),
才能保证较好的图像质量。

*/

/*
时间单位,是指曝光时间单位,
一般摄像机有us(微秒)、ms(毫秒)两种,个别摄像机还有s(秒)。
*/
// 设置曝光时间单位
HVSTATUS status = HVAECControl(hhv, AEC_SHUTTER_UNIT, m_SHUTTER_MS);
HV_VERIFY(status);


/*
在确定曝光时间单位的前提下,可以调节曝光时间值。不同的摄像机、不同的时间单位下,
摄像机的曝光时间值调节范围会有所不同。用户可以查看使用说明书确定其调节范围。
曝光时间与图像大小和水平消隐相关,
所以当图像视频模式、输出图像窗口或水平消隐发生变化时,都要重新设置一下曝光时间。
*/

// 设置曝光时间
HVSTATUS status = HVAECControl(hhv, AEC_SHUTTER_SPEED, nValue);
HV_VERIFY(status);

//范例:为GV400Ux摄像机设置16ms曝光时间
// 设置快门速度
HVSTATUS status = HVAECControl(hhv,AEC_SHUTTER_SPEED,16);
HV_VERIFY(status);
// 设置快门单位
status = HVAECControl(hhv,AEC_SHUTTER_UNIT,SHUTTER_MS);
HV_VERIFY(status);


//------------------------2.21增益调节-------------------------//
/*
增益,是指模拟增益,包括红通道、绿通道、蓝通道三通道的分量增益。
特别说明的是,绿通道有Gr、Gb两个通道,设置时推荐Gr、Gb使用同一个值。
HVSTATUS __stdcall HVAGCControl
(HHV hhv, BYTE byParam, long lValue);
参  数:
HHV hhv;          摄像机句柄。
BYTE byParam;     控制参数,
    RED_CHANNEL    红通道;
    GREEN_CHANNEL1 绿通道1;
    GREEN_CHANNEL2 绿通道2;
    BLUE_CHANNEL   蓝通道;
long lValue;      增益大小
HV-5051Ux系列摄像机增益9-63,其他HV系列摄像机分通道的增益调节取值0-63。
GV400Ux摄像机增益调节为:16-64。
返回值:调用成功,返回STATUS_OK,否则返回错误代码。
说  明:摄像机的自动增益控制。
*/
//范例:各通道同增益
HVSTATUS status = STATUS_OK;
long nGain = 10;//增益系数
// 设置各个分量增益
for (int nChannel = RED_CHANNEL; nChannel <= BLUE_CHANNEL; nChannel++)
{
    status = HVAGCControl(hhv, nChannel, nGain);
    HV_VERIFY(status);
}

//------------------------2.22自动曝光(AEC)-------------------------//
//目前,仅HV5051系列摄像机支持自动曝光功能
//------------------------2.23自动增益(AGC)-------------------------//
//目前,仅HV5051系列摄像机支持自动增益功能

//------------------------2.25AD转换级别-------------------------//
/*
AD转换级别,也叫做数字增益
HVSTATUS __stdcall HVADCControl
(HHV hhv, BYTE byParam, long lValue);
参  数:
HHV hhv;        摄像机句柄。
BYTE byParam;   控制参数,包括:
    ADC_BITS 模拟/数字转换级别;
    ADC_BLKLEVEL_CAL 黑电平参数调节允许;
    ADC_BLKLEVEL_CAL_REDCHANNEL 红色通道黑电平调节;
    ADC_BLKLEVEL_CAL_GREENCHANNEL1绿色通道1黑电平调节;
    ADC_BLKLEVEL_CAL_GREENCHANNEL2绿色通道2黑电平调节;
    ADC_BLKLEVEL_CAL_BLUECHANNEL蓝色通道黑电平调节;
long lValue;    参数值
    设置模拟数字转换级别,取值,
        ADC_LEVEL0;
        ADC_LEVEL1;
        ADC_LEVEL2;
        ADC_LEVEL3;
        ADC_LEVEL4。(仅HV5051Ux支持)
    设置黑电平参数调节允许,取值,
        TRUE 允许;FALSE 禁止。
    设置黑电平参数,取值,
        -255 到 255。    
注:GV400Ux摄像机黑电平参数,取值:-127到127。
返回值:调用成功,返回STATUS_OK,否则返回错误代码

HVUX系列摄像机提供了硬件数字增益,可以由计算机控制选择:
ADC Level 0:原始亮度&times;2
ADC Level 1:原始亮度&times;1
ADC Level 2:原始亮度&divide;2
ADC Level 3:原始亮度&divide;4
HVUX-M:
ADC Level 0:全动态范围(非线性压缩)
ADC Level 1:原始亮度&times;1
ADC Level 2:原始亮度&divide;2
ADC Level 3:原始亮度&divide;4
HVUX-ML:
ADC Level 0:原始亮度&times;2
ADC Level 1:原始亮度&times;1
ADC Level 2:原始亮度&divide;2
ADC Level 3:原始亮度&divide;4
每个通道的增益 = 当前通道的全局增益&times;当前通道的分量增益&times;数字增益
*/

// 设置AD转换级别
HVSTATUS status = HVADCControl(hhv, ADC_BITS, ADC_LEVEL2);
HV_VERIFY(status);

//------------------------2.26黑电平-------------------------//
/*
黑电平(black level)指在经过一定校准的显示装置上,没有一行光亮输出的视频信号电平。
定义图像数据为0时对应的信号电平,调节黑电平不影响信号的放大倍数,而仅仅是对信号进行上下平移。
如果向上调节黑电平,图像将便暗,如果向下调节黑电平图像将变亮。
黑电平为0时,对应0V以下的电平都转换为图像数据0,
0V以上的电平则按照增益定义的放大倍数转换,最大数值为255。

黑电平设定,也就是黑色的最低点。

包括黑电平控制开关和红、绿、蓝三通道的黑电平值。
USB接口数字摄像机都带有黑电平自动校准功能,
当用户需要调整黑电平时需要打开黑电平控制开关,
此时自动校准功能将自动屏蔽。

DH-HV系列USB接口数字摄像机都带有黑电平自动校准功能,
当用户需要调整黑电平时,自动校准功能将自动屏蔽。
如果屏蔽自动黑电平校准功能在有些场合使用将出现一些问题,
特别是使用黑白摄像机时,屏蔽自动黑电平校准功能将使图像产生细密的网格,
此时必须利用彩色摄像机的白平衡功能进行处理才能消除网格,但这会使图像清晰度下降。

黑电平调整是在屏蔽黑电平自动校准功能后才能进行的,DH-HV系列USB接口数字摄像机都支持此功能,
黑电平调整的计算公式为:
偏移电压 = (9bit带符号设置值)* 2mV

*/
// 设置黑电平开关
HVSTATUS status = HVADCControl(hhv,ADC_BLKLEVEL_CAL,ENABLE);
HV_VERIFY(status);

// 设置三通道的黑电平值
long nValue = 10;
for (int nChannel = ADC_BLKLEVEL_CAL_REDCHANNEL;
    nChannel <= ADC_BLKLEVEL_CAL_BLUECHANNEL;
    nChannel++ )
{
    status = HVADCControl(hhv, nChannel, nValue);
    HV_VERIFY(status);
}

 //------------------------2.27 消隐控制 -------------------------//
/*
消隐的取值范围通过函数HVGetDeviceInfo得到,见2.2获取设备信息
HVSTATUS __stdcall HVSetBlanking
(HHV hhv, int nHor, int nVert);
参数:
HHV hhv;    摄像机句柄。
Int nHor;   行消隐值。
Int nVert;  场消隐值。
返回值:调用成功,返回STATUS_OK,否则返回错误代码。
说  明:设置摄像机的消隐值
*/
// 设置消隐范围
int nHorBlank  = 0;
int nVertBlank = 0;
HVSTATUS status = HVSetBlanking(hhv, nHorBlank, nVertBlank);
HV_VERIFY(status);

//------------------------2.28 图像镜像-------------------------//
/*
设置采集图像的镜像功能。
目前,仅GV400Ux和HV5051Ux系列摄像机同时支持垂直、水平和完全镜像,
其他摄像机都只支持垂直镜像。

图像镜像:

注:HV5051Ux摄像机改变图像镜像模式,会修改bayer格式,
故改变图像镜像模式后需要重新获取bayer格式。
*/
//设置垂直镜像
HV_MIRROR_DIRECTION dir = VERT_DIR;
HVSTATUS status = HVEnableVideoMirror(hhv, dir, TRUE);
HV_VERIFY(status);

//------------------------2.29 图像帧信息-------------------------//
//目前,仅HV5051系列摄像机支持获取图像帧信息功能

//------------------------2.30自动白平衡-------------------------//
//目前,仅HV5051系列摄像机支持自动白平衡功能

//------------------------2.31颜色校正-------------------------//
//目前,仅HV5051系列摄像机支持颜色校正功能

 

 

 

 

 

 

 

你可能感兴趣的:(mfc,大恒图像,HV2051UCML)