实验一自动读出仪表指示的读数
- 格式:doc
- 大小:67.00 KB
- 文档页数:9
实验一自动读出仪表指示的读数一、实验内容对于给定的仪表,自动读出仪表指示的读数,要求选取合适的图像处理与识别方法,写出实验步骤以及处理过程。
图一仪表图二、实验意义指针式仪表是目前生产过程中应用非常普遍的测量仪表之一,不仅种类多,而且生产的数量大。
如:百分表、千分表、压力表、汽车仪表、航空仪表等等。
这些精密测量仪器在我国工业生产中发挥着举足轻重的作用。
仪表生产企业和计量检定部门,需要在生产和使用过程中对百分表和千分表的示值误差进行定期检定,以检测仪表是否满足生产要求和国家检测局的规定准确度,以判断是否合格。
到目前为止,传统的检测机构对这类仪表的检定方法,主要是采用组合不同长度的标准量块组为尺度基准,或采用具有刻度的高精度微机构为长度基准,然后用人工观测、记录、分析仪表盘的示值读数。
这种检定方法存在的问题是1、人工目测示值读数的精度低,可靠性差,重复性差;2、检定人员劳动强度大,检定时间长,工作效率低;3、只能进行有限位置上的定点的检测,灵活性和通用性差。
4、手工计算效率低,而且一次只能给出单点的误差值,无法得到完整的误差分析。
因此,针对我国目前所普遍采用的传统检定方法,尽快研制出一种能够快速、准确、稳定的全自动指针式仪表的自动检定系统,将对我国的仪表生产和检定起到巨大的推动作用。
数字图像处理技术(Digital Image Processing Techn0109y)是一门通过数字化的方法利用计算机对图像进行处理(包括图像的输入、输出,图像的增强、调整、变换,图像的特征提取,图像的分析与识别等)的新技术。
通常所说的数字图像处理是指计算机进行的处理,因此也称为计算机图像处理(conlputer Image Processing)。
数字图像处理研究的主要内容包括:(1)图像变换由于图像阵列很大,直接在空间域中进行处理,涉及计算量很大,因此,往往采用各种图像变换的方法(如傅立叶变换、沃尔什变换、离散余弦变换等间接处理技术)将空间域的处理转换为变换域的处理。
物理实验技术中的仪器显示与读数技巧引言物理实验技术是物理学研究的基础,而仪器显示与读数技巧对于实验结果的准确性和可信度有着重要的影响。
本文将介绍一些常见的物理实验仪器显示与读数的技巧,帮助读者提高实验数据的准确性和可靠性。
一、仪器显示技巧1. 清晰度调节在实验过程中,我们常常需要仪器显示的数据具备清晰度,以便我们精确地读取。
调节仪器显示的对比度、亮度和焦距,使其在最佳状态下显示数据。
如果仪器的显示不清晰,可以尝试调整显示屏的观测角度或者使用放大镜辅助观察。
2. 单一显示为保证数据的准确性,我们应该尽可能使用仪器的单一显示功能。
避免将多个数据同时显示在一个屏幕上,因为这样容易导致我们的注意力分散而产生误读。
3. 零位调节在进行测量之前,我们应该首先进行零位调节。
这样可以确保仪器在未连接到任何物体时显示为零,以减小测量误差。
常见的零位调节方法包括调节零位旋钮或者使用自动校准功能(如果有的话)。
二、读数技巧1. 学会估读估读是一种常用的读数技巧,它可以帮助我们在没有精确测量的情况下获得近似结果。
通过观察一个刻度范围内的位置来估计读数的值,并在该范围内插值,以获得更精确的读数。
2. 刻度辨别在某些仪器上,刻度可能非常密集,难以判断指针所指位置。
在这种情况下,我们可以通过使用一个透明的刻度板或者放大镜来辅助读数。
将透明刻度板或放大镜放在刻度盘上,可以使刻度变得更清晰,更容易辨别。
3. 阅读分度盘分度盘是一种常见的用于测量角度的仪器。
为了准确读取角度,我们应该保持视线垂直于分度盘,并使用一个指向分度盘中心的直角物体,如一根针或尺子。
通过将直角物体拿开,我们可以观察到分度盘旋转到的位置。
4. 借助限位器当使用仪器进行测量时,有时我们需要限制仪器的移动范围。
这可以通过借助限位器来实现。
限位器是一种用于限制测量范围的装置,它可以帮助我们固定测量位置并减小人为误差。
结论仪器显示与读数技巧对于物理实验的准确性和可靠性至关重要。
指针式仪表自动读数的研究及应用的开题报告一、研究背景随着科技的不断发展和进步,现代工业领域中常常使用电子仪器来进行测量和控制,这些仪器在工业自动化过程中起着不可或缺的作用。
尤其在生产线上,自动化测量和控制系统的使用已不是新鲜事物,它们能够提高生产效率,保证产品品质,降低人工成本,进而提高生产效率和经济效益。
指针式仪表是测量和控制系统中常用的一类仪器,它通过指针和刻度盘的协作,在人眼和身体形态感性地反映测量量的大小。
然而,传统的指针式仪表需要人工记录读数,存在人为误差和读取效率低下的问题。
为了解决这一问题,自动读数技术在现代指针式仪表中得到了广泛应用。
自动读数技术在指针式仪表的表面上覆盖一层透明光电传感器,通过光电传感技术自动获取仪表读数,消除了人为误差,大大提高了读数效率,使得指针式仪表在大规模应用领域中更具实用价值。
二、研究内容和目标本文拟探究指针式仪表自动读数技术在工业自动测量和控制领域中的应用。
主要研究内容包括:光电传感器的选用和安装,自动读数程序设计,数据管理系统开发等方面。
旨在建立一套基于自动读数技术的指针式仪表测量和控制系统,提高生产自动化水平,提高生产效率和经济效益。
三、研究方法和步骤1.研究相关文献资料并进行分析:对现有的指针式仪表自动读数技术进行调研、比较和综合评估,归纳整理出其优缺点,为后续的研究提供基础。
2.光电传感器的选用和安装:通过光学理论和实际测量测试,选定最优的光电传感器,并进行合理的安装和调试。
3.自动读数程序的设计:通过C语言和嵌入式系统技术,编写自动读数程序,实现仪表的自动读数和数据采集。
4.数据管理系统的开发:开发一个实用的数据管理系统,对采集的数据进行处理、存储和分析,为生产线的控制和调整提供依据。
四、研究意义和实用价值本文所涉及的指针式仪表自动读数技术,已逐渐成为现代化工业自动化测量和调控的必然趋势。
该技术不仅能够提高生产效率,降低人工成本,提高精度和稳定性,还能够有效地保证产品质量和安全性。
主要仪器仪表的读数方法一、游标卡尺与螺旋测微器的读数1)不论是哪种测量仪,测量值=主尺读数+游标尺读数×最小精度。
游标卡尺主尺的读数读游标尺零刻度线左侧一格(注意不要读成游标尺边框左侧一格)。
游标尺的读数为游标尺与主尺对齐的刻度线格子数。
游标尺上有10小格的即为10分度尺,最小精度为10的倒数,即0.1mm;依次类推:20分度尺的最小精度为0.05mm,50分度尺的最小精度为0.02mm,螺旋测微器的最小精度为0.01mm。
2)读数时都应以毫米为单位(注意游标卡尺的主尺上标注的数字以cm为单位),作答时按要求换算。
3)螺旋测微器读数时,必须估读,以毫米为单位,一定是三位小数(故名千分尺)。
游标卡尺不要估读。
以毫米为单位,十分度(0.1mm)的只有一位小数,二十分度(0.05mm)和五十分度(0.02mm)的应有两位小数。
【读数练习】1.用游标为50分度的游标卡尺测量某工件的长度时,示数情况如图21-1所示,则测量结果应该读作mm 。
2.有一游标卡尺,主尺的最小分度是1mm,游标上有20个小的等分刻度。
用它测量一工件的长度,如上右图所示,图示的读数是 mm。
3.一游标卡尺的主尺最小分度为1mm,游标上有10个小等分间隔,现用此卡尺来测量工件的直径,如下左图所示。
该工件的直径为___________mm。
4.使用游标为10个小等分刻度的游标卡尺测量一物体的尺寸,得到上右图中的游标卡尺的读数,由于遮挡,只能看到游标的后半部分,图中游标卡尺的读数为cm;5.已知不同的工具测量某物体的长度时,有下列不同的结果:A.2.4cm B.2.37cm C.2.372cm D.2.3721cm其中,用最小分度值为厘米的刻度尺测量的结果是________;用游标尺上有10个等分刻度的游标卡尺测量的结果是_________。
6.下图是用螺旋测微器测量三根金属棒直径的示意图,从左到右三根金属棒的直径依次为: mm 、 mm 、 mm 。
智能仪表实验实验一:LED显示实验实验程序:#include<reg52.h>#define uchar unsigned char#define uint unsigned intsbit D1=P1^0;sbit D2=P1^1;sbit D3=P1^2;sbit D4=P1^3;sbit D5=P1^4;sbit D6=P1^5;sbit D7=P1^6;void Delay1ms() //@12.000MHz{unsigned char i, j;i = 2;j = 239;do{while (--j);} while (--i);}void DelayNms(uint x) //@12.000MHz{uint i;for(i=0;i<x;i++)Delay1ms();}void main(){while(1){P1=0X88;//D0,D1,D2,D4,D5,D6亮,显示0DelayNms(1000);P1=0XDB;//D2,D5亮,显示1DelayNms(1000);P1=0XA2;//D0,D2,D3,D4,D6亮,显示2DelayNms(1000);P1=0X92;//D0,D2,D3,D5,D6亮,显示3DelayNms(1000);P1=0XD1;//D1,D2,D3,D5亮,显示4DelayNms(1000);P1=0X94;//D0,D1,D3,D5,D6亮,显示5DelayNms(1000);P1=0X85;//D1,D3,D4,D5,D6亮,显示6DelayNms(1000);P1=0XDA;//D0,D2,D5亮,显示7DelayNms(1000);P1=0X80;//D0,D1,D2,D3,D4,D5,D6亮,显示8DelayNms(1000);P1=0X90;//D0,D1,D2,D3,D5,D6亮,显示9DelayNms(1000);}}实验二:A/D转换实验:实验程序:#include<reg52.h>#include<absacc.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned intuchar ADCDat[3];//uchar bdata ADCbase_at_0x2f; sbit ADC=PSW^5;sbit COM=P3^1;void Tran(){uchar Dat;Dat=ADCDat[0];if((Dat&0x40)==0x40){P1=0xFF;P2=0xFF;P3|=0XF0;return;}if((Dat&0x20)==0x20){P1=0x00;P2=0x00;P3|=0X0F;return;}if((Dat&0x80)==0x80) COM=0;else COM=1;Dat=_crol_(ADCDat[0],4);Dat=Dat&0xf0;P3&=0X0f;P3|=Dat;P1=ADCDat[1];P2=ADCDat[2];return;}void main(){//ADCDat=0x20;P0=0x0FF;TCON=0x01;IE=0x81;while(1){// if(ADC==1)// {// ADC=0;Tran();// }}}void int0() interrupt 0 using 1{uchar Dat1;IE=0x00;Dat1=P0;if((Dat1&0xf0)==0){Dat1=_crol_((Dat1&0x0f),4);ADCDat[0]=(Dat1&0xe0)|(_crol_(Dat1,4))&0x01;do Dat1=P0;while((Dat1&0x80)==0);ADCDat[1]=_crol_((Dat1&0x0f),4);do Dat1=P0;while((Dat1&0x40)==0);Dat1=Dat1&0x0f;ADCDat[1]=ADCDat[1]|Dat1;do Dat1=P0;while((Dat1&0x20)==0);ADCDat[2]=_crol_((Dat1&0x0f),4);do Dat1=P0;while((Dat1&0x10)==0);Dat1=Dat1&0x0f;ADCDat[2]= ADCDat[2]|Dat1;ADC=1;}Tran();IE=0x81;}实验三:D/A转换实验实验程序:#include<reg52.h>#include<absacc.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned intuchar code sine_table[]={0x80,0x8c,0x98,0xa5,0xb0,0xbc,0xc7,0xd1,0xda,0xe2,0xea,0xf0,0xf6,0xfa,0xfd,0xff,0xff,0xff,0xfd,0xfa,0xf6,0xf0,0xea,0xe3,0xda,0xd1,0xc7,0xbc,0xb1,0xa5,0x99,0x8c,0x80,0x73,0x67,0x5b,0x4f,0x43,0x39,0x2e,0x25,0x1d,0x15,0xf,0x9,0x5,0x2,0x0,0x0,0x0,0x2,0x5,0x9,0xe,0x15,0x1c,0x25,0x2e,0x38,0x43,0x4e,0x5a,0x66,0x73};sbit K1=P2^7;sbit WR1=P2^5;void Delay(uchar x){uchar i;while(--x)for(i=0;i<1;i++);}void main(){uchar k;while(1){if(K1==0){for(k=0;k<64;k++){WR1=1;P0=sine_table[k];WR1=0;Delay(1);}}else{for(k=0;k<255;k=k+4){WR1=1;P0=sine_table[k];WR1=0;Delay(1);}}}}实验四:步进电机实验实验程序:#include<reg52.h>#define uchar unsigned char#define uint unsigned intuchar code FFW[]={0X03,0X02,0X06,0X04,0X0C,0X08,0X09,0X01,}; uchar code REV[]={0X01,0X09,0X08,0X0C,0X04,0X06,0X02,0X03,}; sbit K1=P3^0;sbit K2=P3^1;sbit K3=P3^2;void delay_ms(uint x){uchar t;while(x--)for(t=0;t<120;t++);}void STEP_MOTOR_FFW(uchar n){uchar i,j;for(i=0;i<1*n;i++){for(j=0;j<8;j++){if(K3==0)break;P1=FFW[j];delay_ms(200);}}}void STEP_MOTOR_REV(uchar n) {uchar i,j;for(i=0;i<1*n;i++){for(j=0;j<8;j++){if(K3==0)break;P1=REV[j];delay_ms(200);}}}void main(){uchar n=3;while(1){if(K1==0){P0=0XFE;STEP_MOTOR_FFW(n);//if(K3==0)break;}else if(K2==0){P0=0XFD;STEP_MOTOR_REV(n);//if(K3==0)break;}else{P0=0XFb;//P1=0X03;}}}实验五、六:热电阻测温装置实验程序:#include<reg52.h>#include<intrins.h>#include<math.h>#define uint unsigned int#define uchar unsigned char sbit CS=P3^3; //使能。
实验一自动读出仪表指示的读数一、实验内容对于给定的仪表,自动读出仪表指示的读数,要求选取合适的图像处理与识别方法,写出实验步骤以及处理过程。
图一仪表图二、实验意义指针式仪表是目前生产过程中应用非常普遍的测量仪表之一,不仅种类多,而且生产的数量大。
如:百分表、千分表、压力表、汽车仪表、航空仪表等等。
这些精密测量仪器在我国工业生产中发挥着举足轻重的作用。
仪表生产企业和计量检定部门,需要在生产和使用过程中对百分表和千分表的示值误差进行定期检定,以检测仪表是否满足生产要求和国家检测局的规定准确度,以判断是否合格。
到目前为止,传统的检测机构对这类仪表的检定方法,主要是采用组合不同长度的标准量块组为尺度基准,或采用具有刻度的高精度微机构为长度基准,然后用人工观测、记录、分析仪表盘的示值读数。
这种检定方法存在的问题是1、人工目测示值读数的精度低,可靠性差,重复性差;2、检定人员劳动强度大,检定时间长,工作效率低;3、只能进行有限位置上的定点的检测,灵活性和通用性差。
4、手工计算效率低,而且一次只能给出单点的误差值,无法得到完整的误差分析。
因此,针对我国目前所普遍采用的传统检定方法,尽快研制出一种能够快速、准确、稳定的全自动指针式仪表的自动检定系统,将对我国的仪表生产和检定起到巨大的推动作用。
数字图像处理技术(Digital Image Processing Techn0109y)是一门通过数字化的方法利用计算机对图像进行处理(包括图像的输入、输出,图像的增强、调整、变换,图像的特征提取,图像的分析与识别等)的新技术。
通常所说的数字图像处理是指计算机进行的处理,因此也称为计算机图像处理(conlputer Image Processing)。
数字图像处理研究的主要内容包括:(1)图像变换由于图像阵列很大,直接在空间域中进行处理,涉及计算量很大,因此,往往采用各种图像变换的方法(如傅立叶变换、沃尔什变换、离散余弦变换等间接处理技术)将空间域的处理转换为变换域的处理。
图像变换不仅可减少计算量,而且可使图像获得更有效的处理(如傅立叶变换可在频域中进行数字滤波处理1。
目前新兴研究的小波变换在时域和频域中都具有良好的局部化特性,它在图像处理中也有着广泛而有效的应用。
(2)图像编码压缩图像编码压缩技术可减少描述图像的数据量(即比特数),以便节省图像传输、处理时间和减少所占用的存储器容量。
压缩可以在不失真的前提下获得,也可以在允许的失真条件下进行。
编码是压缩技术中最重要的方法,它在图像处理技术中是发展最早且比较成熟的技术。
(3)图像增强和复原图像增强和复原的最的是为了提高图像的质量,如去除噪声,提高图像的清晰度等。
图像增强不考虑图像降质的原因,突出图像中所感兴趣的部分。
如强化图像高频分量,可使图像中物体轮廓清晰,细节明显,强化低频分量可减少图像中噪声影响。
图像复原要求对图像降质的原因有一定的了解,一般讲应根据降质过程建立“降质模型,再采用某种滤波方法,恢复或重建原来的图像。
(4)图像分割图像分割是数字图像处理中的关键技术之一。
图像分割是将图像中有意义的特征部分提取出来。
有意义的特征一般有图像中的边缘、区域等,这是进一步进行图像识别、分析和理解的基础。
虽然目前已研究出不少边缘提取、区域分割的方法,但还没有一种普遍适用于各种图像的有效方法。
因此,对图像分割的研究还在不断深入之中,是目前图像处理中研究的热点之一。
(5)图像描述图像描述是图像识别和理解的必要前提。
作为最简单的二值图像可采用其几何特性描述物体的特性,一般图像的描述方法采用二维形状描述,它有边界描述和区域描述两类方法。
对于特殊的纹理图像可采用二维纹理特征描述。
随着图像处理研究的深入发展,己经开始进行三维物体描述的研究,提出了体积描述、表面描述、广义圆柱体描述【”】等方法。
(6)图像识别图像识别属于模式识别的范畴,其主要内容是图像经过某些预处理(增强、复原、压缩)后,进行图像分割和特征提取,进而对提取的特征进行判决分类。
图像分类常采用经典的模式识别方法,有统计模式分类和句法(结构)模式分类。
近年来新发展起来的模糊模式识别和人工神经网络模式分类在图像识别中也越来越受到重视。
三、实验思路自动读出时钟的指针关键在于找出指针,在实验过程中考虑到时钟是圆形的,所以可以进行坐标变换将图片xy坐标转换成极坐标表示,这样就可以将指针表示成直线,方便求取。
四、实验步骤(1)利用孤立点检测法,构造相应的掩膜滤波器,对图像扫描,识别仪表盘的圆心。
(2)当压力为0Pa时,指针会指向0刻度,此时,利用线检测法,构造相应的掩膜滤波器检测指针,例如:方向为↙0 -1 -1-1 0 -11 1 0既可以检测出指针位置,又可以检测出0刻度位置。
(3)使压力表的读数变为满刻度0.4MPa,用上述方法检测指针,此时方向为↘。
(4)记录0刻度与满刻度角度差,并将其等分为80份。
(5)设此刻压力表读数为X,识别出指针后,将初始化时的两幅图与此时图做图像融合,之后检测两指针夹角θ。
(6)根据所得夹角,计算出相应读数。
五、实验程序#include"stdafx.h"#include<iostream>#include<cv.h>#include<highgui.h>#include<vector>usingnamespace std;usingnamespace cv;int _tmain(int argc, _TCHAR* argv[]){ Mat blurImg;Mat srcImg=imread("C:\\Users\\ Desktop\\clock2.jpg",0);threshold(srcImg,blurImg,135,255,THRESH_BINARY);imshow("blurImg",blurImg);////////////////////找仪表的上下左右边界////////////////////// double l=0,r=0,u,d;double center_x=0,center_y=0;for(int i=0;i<blurImg.cols;++i){ double sum=0;for(int j=0;j<blurImg.rows;++j){uchar intensity = blurImg.at<uchar>(j,i);sum+=intensity;}if(sum<255*blurImg.rows){l=i;break;}}for(int i=blurImg.cols-1;i>=0;i--){ double sum=0;for(int j=0;j<blurImg.rows;++j){uchar intensity = blurImg.at<uchar>(j,i);sum+=intensity;}if(sum<255*blurImg.rows){r=i;break;}}for(int i=0;i<blurImg.rows;++i){ double sum=0;for(int j=0;j<blurImg.cols;++j){uchar intensity = blurImg.at<uchar>(i,j);sum+=intensity;}if(sum<255*blurImg.cols){u=i;break;}}for(int i=blurImg.rows-1;i>=0;i--){ double sum=0;for(int j=0;j<blurImg.cols;++j){uchar intensity = blurImg.at<uchar>(i,j);sum+=intensity;}if(sum<255*blurImg.cols){d=i;break;}}center_x=(l+r)/2.0;//find centercenter_y=(u+d)/2.0;cout<<"left of the clock is:left="<<l<<endl;cout<<"right of the clock is:right="<<r<<endl;cout<<"up of the clock is:up="<<u<<endl;cout<<"down of the clock is:down="<<d<<endl;cout<<"center_x of the clock is:center_x="<<center_x<<endl;cout<<"center_y of the clock is:center_y="<<center_y<<endl;///////////////////对仪表进行坐标变换//////////////////////IplImage sour=(IplImage)blurImg;IplImage *dst=cvCreateImage(Size(600,360),8,1);cvLogPolar(&sour,dst,cvPoint2D32f(center_x,center_y),100,CV_INTER_LINEAR + CV_WARP_FILL_OUTLIERS);Mat dstImg=(Mat)dst;threshold(dstImg,dstImg,250,255,THRESH_BINARY);imshow("dstImg",dstImg);/////////////////////选取两个感兴趣区域////////////////////////Rect r1(450,0,20,dstImg.rows);Rect r2(530,0,10,dstImg.rows);Mat roiImg1=dstImg(r1);Mat roiImg2=dstImg(r2);imshow("roiImg1",roiImg1);imshow("roiImg2",roiImg2);vector<int> uptodown1,uptodown2;vector<int> downtoup1,downtoup2;vector<int> m,n;for(int i=1;i<roiImg1.rows-1;i++){ int intensity1 = roiImg1.at<uchar>(i,10);m.push_back(intensity1);int intensity2 = roiImg1.at<uchar>(i-1,10);int intensity3 = roiImg1.at<uchar>(i+1,10);if(intensity1==0){if(intensity2==255)uptodown1.push_back(i);if(intensity3==255)downtoup1.push_back(i);}}for(int i=1;i<roiImg2.rows-1;i++){int intensity1 = roiImg2.at<uchar>(i,0);n.push_back(intensity1);int intensity2 = roiImg2.at<uchar>(i-1,5);int intensity3 = roiImg2.at<uchar>(i+1,5);if(intensity1==0){if(intensity2==255)uptodown2.push_back(i);if(intensity3==255)downtoup2.push_back(i);}}cout<<"The size of uptodown1 is:"<<uptodown1.size()<<endl; cout<<"The size of downtoup1 is:"<<downtoup1.size()<<endl; cout<<"The size of uptodown2 is:"<<uptodown2.size()<<endl; cout<<"The size of downtoup2 is:"<<downtoup2.size()<<endl; vector<double> ave1,ave2;////存指针中心for(int i=0;i<uptodown1.size();i++){double sum=0,ave=0;sum+=(uptodown1[i]+downtoup1[i]);ave=sum/2.0;ave1.push_back(ave);}for(int i=0;i<uptodown2.size();i++){double sum=0,ave=0;sum+=(uptodown2[i]+downtoup2[i]);ave=sum/2.0;ave2.push_back(ave);}cout<<"In the roiImgi,the value of arrow is:"<<endl;for(int i=0;i<uptodown1.size();i++){cout<<ave1[i]<<endl;}cout<<"In the roiImgi,the value of arrow is:"<<endl;for(int i=0;i<uptodown2.size();i++){cout<<ave2[i]<<endl;}cout<<"The size of ave1 is:"<<ave1.size()<<endl;cout<<"The size of ave1 is:"<<ave2.size()<<endl;double second_y,minute_y,hour_y;if((downtoup2[1]-uptodown2[1])<(downtoup2[0]-uptodown2[0])) {second_y=ave2[1];minute_y=ave2[0];}else{second_y=ave2[0];minute_y=ave2[1];}cout<<"The y value of second arrow is:"<<second_y<<endl; cout<<"The y value of minute arrow is:"<<minute_y<<endl;int second_flag=0,minute_flag=0,hour_flag=0;for(int i=0;i<ave1.size();++i){if((ave1[i]-second_y)<5)second_flag=i;}for(int i=0;i<ave1.size();++i){if((ave1[i]-minute_y)<5)minute_flag=i;}hour_flag=3-second_flag-minute_flag;cout<<"hour_flag="<<second_flag<<endl;hour_y=ave1[hour_flag];cout<<"The y value of hour arrow is:"<<hour_y<<endl; int clock_hourif(hour_y>270){clock_hour=(hour_y-270)/30;}elseclock_hour=(90+hour_y)/30;cout<<"clock_hour="<<clock_hour<<endl;waitKey(0);return 0;}。