系统工程师测试题目结果:开发环境:VC++6.0OPENCVSQLserver2005效果图片如下:各部分说明如下:1.循环显示所提供的图像,并设置读图像的间隔时间。1.1添加picture控件,用于显示图片。1.2在工程的设置中,添加OPENCV系统头文件的路径。1.3在CDahengApp::InitInstance()里添加语句SetTimer(NULL,1,5000,NULL);设置时间间隔为5s。1.4在CDahengDlg中添加消息WM_TIMER,在函数OnTimer()中填入如下内容:inth;//h用于循环,将所用的图片放在某一个路径下,文件名为1.bmp,2.bmp。。。5.bmpCStringOpen_Filename;for(h=1;h6;h++){switch(nIDEvent){case1:{charc[10]=;Open_Filename=D:\\系统工程师\\所用图片\\新建文件夹(5)\\;Open_Filename=Open_Filename+itoa(h,c,10);Open_Filename=Open_Filename+.bmp;IplImage*ipl=cvLoadImage(Open_Filename,-1);//读取图片,缓存到局部变量ipl中if(!ipl)return;if(TheImage)//TheImage为IplImage*类型的变量cvZero(TheImage);ResizeImage(ipl);//对读入的图片进行缩放,使其宽或高最大值者刚好等于预设的大小,再复制到TheImage中ShowImage(TheImage,IDC_picture);//显示图片,IDC_picture为picture控件的名称SetTimer(1,5000,NULL);//定时,时间为5sInvalidate(FALSE);CDialog::OnTimer(1);//调用定时函数cvReleaseImage(&ipl);//释放iplbreak;}default:break;}}其中,函数ResizeImage(ipl)和ShowImage(TheImage,IDC_picture)定义分别如下:voidCDahengDlg::ResizeImage(IplImage*img){intw=img-width;inth=img-height;intmax=(wh)?w:h;//找出宽和高中的较大值者floatscale=(float)((float)max/500.0f);floatscale2=(float)((float)max/500.0f);//计算将图片缩放到TheImage区域所需的比例因子intnw=(int)(w/scale);intnh=(int)(h/scale2);//缩放后图片的宽和高inttlx=(nwnh)?0:(int)(256-nw)/2;inttly=(nwnh)?(int)(256-nh)/2:0;//设置ROI区域,用来存入图片imgcvSetImageROI(TheImage,cvRect(tlx,tly,nw,nh));//对图片img进行缩放,并存入到TheImage中cvResize(img,TheImage);cvResetImageROI(TheImage);//重置TheImage的ROI准备读入下一幅图片voidCDahengDlg::ShowImage(IplImage*img,UINTID){CDC*pDC=GetDlgItem(ID)-GetDC();//获得显示控件的DCHDChDC=pDC-GetSafeHdc();//获取HDC(设备句柄)来进行绘图操作CRectrect;GetDlgItem(ID)-GetClientRect(&rect);intrw=rect.right-rect.left;//求出图片控件的宽和高intrh=rect.bottom-rect.top;intiw=img-width;//读取图片的宽和高intih=img-height;inttx=(int)(rw-iw)/2;//使图片的显示位置正好在控件的正中intty=(int)(rh-ih)/2;SetRect(rect,tx,ty,tx+iw,ty+ih);CvvImagecimg;cimg.CopyOf(img);//复制图片cimg.DrawToHDC(hDC,&rect);//将图片绘制到显示控件的指定区域内ReleaseDC(pDC);}2.做一个dll检测动态库,实现图像反色。2.1创建一个Win32Dynamic-LinkLibrary的工程,在该工程里,添加一个C++源文件,其中编写的反色函数如下:#includecv.h#includehighgui.h_declspec(dllexport)voidrevcolor(IplImage*img){intstep=img-widthStep;//取出图像每行所占的字节数intheight=img-height;intwidth=img-width;uchar*data=(uchar*)img-imageData;for(inti=0;iheight;i++)for(intj=0;jwidth;j++)for(intk=0;k3;k++)//3为图像的通道data[i*step+j*3+k]=255-data[i*step+j*3+k];}2.2Build,生成.dll文件和.lib文件2.3将上述两个文件复制到Daheng程序所在的目录下,并在Daheng工程设置的Link选项卡下,加入上述的lib文件。2.4在dahengDlg.cpp的前面加上externvoidrevcolor(IplImage*img),对dll中的函数进行申明。2.5在daheng的对话框中再加入另外一个picture控件,名称为IDC_picture2。2.6在1.4的OnTimer()函数体中加入如下语句:IplImage*ipl2=cvLoadImage(Open_Filename,-1);//ipl2和TheImage2均为反色图准备if(!ipl2)return;if(TheImage2)cvZero(TheImage2);revcolor(ipl2);ResizeImage(ipl2);ShowImage(TheImage2,IDC_picture2);//反色图显示在第二个控件中cvReleaseImage(&ipl2);3.连接数据库3.1在SQLServer2005中创建数据库management,该数据库中有表daheng用来存放检测信息。daheng表的结构如下:属性名类型是否为主键允许空编号int是检测结果char(10)否√检测个数int否√废品个数int否√光电时差int否√检测速度char(10)否√检测产品char(10)否√产品图image否√3.2在工程的StdAfx.h头文件里引入ADO库文件。代码如下所示:#importc:\programfiles\commonfiles\system\ado\msado15.dllno_namespacerename(EOF,adoEOF)3.3定义ADO连接变量指针,在daheng.h文件的classCDahengApp:publicCwinApp中加入_ConnectionPtrpConn;在dahengDlg.h文件的classCDahengDlg:publicCDialog中添加:_RecordsetPtrm_pRecordset;//记录集接口_ConnectionPtrpConn;3.4在daheng.cpp文件的BOOLCDahengApp::InitInstance()里初始化COM:AfxOleInit();pConn.CreateInstance(__uuidof(Connection));try{pConn-ConnectionString=Provider=SQLOLEDB.1;PersistSecurityInfo=False;UserID=sa;Password=8878467;InitialCatalog=management;DataSource=IBPBVFNVQZAT8YI\\SQLEXPRESS;//打开本地SqlServer库managementpConn-Open(,,,adConnectUnspecified);}catch(_com_error&e){AfxMessageBox(e.ErrorMessage());AfxMessageBox((LPCTSTR)e.Description());}3.5在dahengDlg.cpp的#endif下面添加:externCDahengApptheApp;//用theApp来获取库连接指针在BOOLCDahengDlg::OnInitDialog()函数中添加:m_pRecordset.CreateInstance(ADODB.Recordset);try{m_pRecordset-Open(SELECT*FROMdaheng,_variant_t((IDispatch*)theApp.pConn,true),adOpenStatic,adLockOptimistic,adCmdText);}catch(_com_errore){AfxMessageBox(读取数据库失败!);}3.6在对话框中加入一个按钮,名称为“存入数据库”,为按钮添加相应的函数OnSave,函数体如下:pConn.CreateInstance(__uuidof(Connection));CFilef;CStringFilePathName;CFileExceptione;CStringstrSQL;CStrings1,s2,s3,s4,s5,s6;GetDlgItemText(IDC_jiancejieguo,s1);GetDlgItemText(IDC_jiancegeshu,s2);GetDlgItemText(IDC_feipingeshu,s3);GetDlgItemText(IDC_guangdianshicha,s4);GetDlgItemText(IDC_jaincesudu,s5);GetDlgItemText(IDC_jiancechanpin,s6);//获取6个编辑框的内容保存到s1到s6m_pRecordset-AddNew();//添加新记录m_pRecordset-PutCollect(检测结果,(_bstr_t)s1);m_pRecordset-PutCollect(检测个数,(_bstr_t)s2);m_pRecordset-PutCollect(废品个数,(_bstr_t)s3);m_pRecordset-PutCollect(光电时差,(_bstr_t)s4);m_pRecordset-PutCollect(检测速度,(_bstr_t)s5);m_pRecordset-PutCollect(检测产品,(_bstr_t)s6);if(TheImage){cvSaveImage(D:\\系统工程师\\所用图片\\新建文件夹(5)\\10.bmp,TheImage);//获取图片,保存在临时文件10.bmp中CFilef;CStringFilePathName(D:\\系统工程师\\所用图片\\新建文件夹(5)\\10.bmp);CFileExceptione;if(f.Open(FilePathName,CFile::modeRead|CFile::typeBinary,&e)){intnSize=f.GetLength();//先得到文件长度BYTE*pBuffer=newBYTE[nSize];//按文件的大小在堆上申请一块内存if(f.Read(pBuff