首页 理论教育 摄像机控制

摄像机控制

时间:2022-03-03 理论教育 版权反馈
【摘要】:可对当前摄像机进行相关状态参数设置,用于调节摄像机的拍摄状态和效果等,主要包括如下内容。摄像机控制模块采用RS-232串口通信技术实现摄像机与主控电脑间的通信数据传输。系统中采用Sony EVI D70 3CCD彩色高清摄像头,根据其控制信令手册,可以设置其RS-232串口通信参数如下。主控电脑与D70摄像机之间的通信通过共享缓冲区机制实现,主控电脑通过向共享缓冲区发送命令与读取返回信息来交换数据。

3.3.2 摄像机控制

1.摄像机控制模块功能分析与设计

摄像机控制模块主要用来对摄像机进行方向控制、焦距调节、焦点控制以及其他一些控制,它能够对当前的摄像机参数进行保存。摄像机控制模块功能结构图如图3-5所示。

img9

图3-5 摄像机控制模块功能结构图

摄像机控制模块的主要功能如下。

(1)电源开关控制。可实现摄像机的电源开关和复位功能。

(2)机位选择。可实现在正机位摄像机信号与侧机位摄像机信号间的选择和切换。

(3)状态设置。可对当前摄像机进行相关状态参数设置,用于调节摄像机的拍摄状态和效果等,主要包括如下内容。

①方向控制。能够选择一定的速度,使摄像机能够在上下左右等8个方向按选定的速度进行运动,能进行大幅度连续运动,也能进行该方向上的微调。它采取两种方式控制:一种为按钮方式;另一种为鼠标拖动方式。能通过复位按钮使摄像机恢复到绝对中心位置。

②焦距调节。能选择一定的速度,使摄像机以该速度进行远近焦距的调整;能通过鼠标滚轮进行大幅度调整,也能通过按钮进行微调。

③白平衡。可调整摄像机,使之在当前环境下的输出视频颜色为正常值。

④背灯开关。可根据环境需要补充光源。

镜像开关。可使摄像机输出视频图像反向显示或摄像机输出视频静止显示。

⑥图像效果。可选择摄像机输出视频是黑白、负像还是彩色图像。

⑦聚焦调节。可选择采用自动或手动方式调节当前摄像机的焦点位置。

(4)参数保存。当前摄像机各个参数调整好之后,通过设置近景或者远景按钮将该参数保存到数据库中,以备后用。

2.摄像机控制模块功能实现

1)摄像机控制通信协议与参数设置

摄像机控制模块采用RS-232串口通信技术实现摄像机与主控电脑间的通信数据传输。系统中采用Sony EVI D70 3CCD彩色高清摄像头,根据其控制信令手册,可以设置其RS-232串口通信参数如下。

(1)通信速度:9 600bps。

(2)数据位:8位。

(3)开始位:1位。

(4)停止位:1位。

(5)奇偶校验位:无。

主控电脑与D70摄像机之间的通信通过共享缓冲区机制实现,主控电脑通过向共享缓冲区发送命令与读取返回信息来交换数据。D70摄像机命令包结构如图3-6所示。向摄像机发送的控制命令与从缓冲区中接收到的摄像机返回的信息均遵循图3-6中的格式。

img10

图3-6 D70摄像机命令包结构

D70摄像机控制命令第一个字节为命令头“Header”,其具体取值由摄像机或主控电脑根据不同命令设置;每条命令最后一个字节为命令尾“Terminator”,固定为0XFF,中间部分是具体命令。例如,对系统中所有摄像机发送的清空命令,缓冲区的IF_Clear命令为0X88 0X01 0X00 0X01 0XFF,若发送该命令后从缓冲区读出的摄像机返回信息为0X88 0X01 0X00 0X01 0XFF,则表示该命令已正确执行。

2)摄像机控制实现代码

摄像机控制界面如图3-7所示。

(1)通用串口通信类设计。在系统视线中设计一个CSerial类作为通用的串口通信类,封装了串口通信的基础数据和操作,主要包括打开端口、配置端口、设置命令状态、超时设置、读取数据、写入数据、关闭端口等功能。可以根据不同的硬件,实例化CSerial类,实现对不同硬件的串口控制,基本控制流程的代码实现如下所示。

img11

图3-7 摄像机控制界面图

class CSerial

public:

CSerial();

virtual~CSerial();

Open(int nBaud,CString com,BOOL fParit,int Parit);//打开相应的端口

PortClose(void);//对此端口进行关闭,释放它所占的内存空间

SendData(unsigned char*buff,int len);//为串口里面发送数据,每个相应的命令都有相应的指令

ReadData(unsigned char*buff,int maxlen,int &len);//在指定的串口里面读取数据void ClearBuff();

HANDLE m_hIDComDev;

DWORD dwError;

DWORD dwThreadID;//记录此线程的ID号}

(2)摄像机控制通用代码举例。基于以上的CSerial类,可以实现向摄像机发送各种控制命令,基本控制流程的代码实现如下所示。send1[0]=0x88;//摄像机的初始化设置send1[1]=0x30;send1[2]=0x01;send1[3]=0xFF;Cserial mySerial=new Cserial();//寻找摄像机硬件控制的相应串口,然后通过实例化Cserial类,摄像机的相关操作函数就可以被调用

Serial1.Open(m_baudrate1,comc,FALSE,0);//打开端口Serial1.SendData(send1,4);

Serial1.PortClose();//端口的关闭dcb.DCBlength=sizeof(DCB);//摄像机的端口配置,摄像机波特率为9 600bps,数据位为8,停止位为1,奇偶校验位为0

GetCommState(m_hIDComDev,&dcb1);//获得DCB结构体信息,以获得特定的内存空间

dcb.BaudRate=nBaud;//对相应的端口配置相关信息

dcb1.fParity=fParit;dcb1.ByteSize=8;dcb1.Parity=Parit;

dcb1.StopBits=ONESTOPBIT;ReadFile(comc,send,4,0,NULL);//从命令缓冲区读入数据

WriteFile(comc,send,4,0,NULL);//向摄像机发送4个字节的命令函数CloseHandle(comc);//利用串口通信相应的函数实现串口的关闭

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈