人脸识别程序以及机器视觉研究内容和发展方向4.docx
《人脸识别程序以及机器视觉研究内容和发展方向4.docx》由会员分享,可在线阅读,更多相关《人脸识别程序以及机器视觉研究内容和发展方向4.docx(12页珍藏版)》请在冰豆网上搜索。
![人脸识别程序以及机器视觉研究内容和发展方向4.docx](https://file1.bdocx.com/fileroot1/2022-12/14/a856d3ff-69c4-4027-8be0-c6cc514e3471/a856d3ff-69c4-4027-8be0-c6cc514e34711.gif)
人脸识别程序以及机器视觉研究内容和发展方向4
LabWindows实验报告
姓名:
张旭学号:
0905104116专业:
光电信息工程
实验四:
LabWindows用户界面编程
一、实验要求
1、熟悉仪器面板、控件的属性含义及设置;
2、在编程时,能够熟练使用仪器面板的库函数;
二、实验内容
编写一个如下图所示的函数发生器,也可以设计成其它应用程序界面。
3、实验仪器
计算机一台,装有LabWindows
4、实验步骤
步骤1:
根据设计要求,设计如上图所示的用户界面,其具体控件属性设置如下表所示。
控件类型
ConstantName
属性设置
面板Panel
PANEL
命令按钮
CommandButton
QUITBUTTON
CallbackFunction
QuitCallback
Lable
__Quit
曲线图控件
Graph
GRAPH1
ControlMode
Indicator
DataMode
Retain
Lable
波形显示
下拉列表控件
Ring
WAVEFORM
CallbackFunction
WaveFormChooseCB
Label
波形选择
Label/ValuePairs
Label
无
Value
0
正弦波
1
三角波
2
锯齿波
3
方波
4
步骤2:
生成代码框架。
选择Code→Generate→AllCode,生成代码框架,接着添加自定义函数show_wave进行显示。
/*下拉列表控件“波形选择”对应的回调函数*/
intCVICALLBACKWaveFormChooseCB(intpanel,intcontrol,intevent,
void*callbackData,inteventData1,inteventData2)
{
switch(event)
{
caseEVENT_COMMIT:
show_wave();
break;
}
return0;
}
然后,在函数show_wave内添加如下代码。
voidshow_wave(void)
{
intwaveForm;/*波形选择变量*/
doubleample=5.0;/*幅度*/
doublephase=0.0,waveData[POINTS];/*相位和波形数据变量*/
doublesampleRate=10000.0,freq=100.0;/*采样率和频率变量*/
GetCtrlVal(panelHandle,PANEL_WAVEFORM,&waveForm);
switch(waveForm)
{
case0:
/*无波形,即清除所画曲线*/
DeleteGraphPlot(panelHandle,PANEL_GRAPH1,-1,VAL_IMMEDIATE_DRAW);
break;
case1:
/*正弦波*/
SineWave(POINTS,ample,freq/sampleRate,&phase,waveData);
break;
case2:
/*三角波*/
TriangleWave(POINTS,ample,freq/sampleRate,&phase,waveData);
break;
case3:
/*锯齿波*/
SawtoothWave(POINTS,ample,freq/sampleRate,&phase,waveData);
break;
case4:
/*方波*/
SquareWave(POINTS,ample,freq/sampleRate,&phase,50.0,waveData);
break;
}
if(waveform)/*先判断是否选择了波形*/
{
DeleteGraphPlot(panelHandle,PANEL_GRAPH1,-1,VAL_IMMEDIATE_DRAW);
PlotWaveform(panelHandle,PANEL_GRAPH1,waveData,POINTS,VAL_DOUBLE,1.0,0.0,0.0,1.0/sampleRate,VAL_THIN_LINE,VAL_EMPTY_SQUARE,VAL_SOLID,1,VAL_RED);/*画出波形*/
}
}
代码中的函数意义及调用方法如下
1、函数DeleteGraphPlot清除所画曲线,调用路径为:
Library→UerInterfaceLibrary→Controls/Graphs/StripCharts….→GraphsandStirpCharts→DeleteGraphPlot
其参数设置见图1。
图1DeleteGraphPlot函数面板
2、函数SineWave,TriangleWave,SawtoothWave,SquareWave分别为正弦波,三角波,锯齿波和方波生成函数。
它们都在Library→AdvancedAnalysisLibrary→SignalGeneration目录下获得,其参数设置如图2~图5所示。
3、函数PlotWaveform,画曲线图函数,调用路径为:
Library→UerInterfaceLibrary→Controls/Graphs/StripCharts….→GraphsandStirpCharts→PlotWaveform,其参数设置见图6。
图2正弦波生成函数面板
图3三角波生成函数面板
图4锯齿波生成函数面板
图5方波生成函数面板
图6PlotWaveform函数面板
步骤3:
运行程序。
选择Run→Debugex1_dbg.exe。
5、关键代码及注释
#include
#include
#include
#include"myhanshu.h"
#definePOINTS512
staticintpanelHandle;
intmain(intargc,char*argv[])
{
if(InitCVIRTE(0,argv,0)==0)
return-1;/*outofmemory*/
if((panelHandle=LoadPanel(0,"myhanshu.uir",PANEL))<0)
return-1;
DisplayPanel(panelHandle);
RunUserInterface();
DiscardPanel(panelHandle);
return0;
}
voidshow_wave(void)
{
intwaveForm;/*波形选择变量*/
doubleample=5.0;/*幅度*/
doublephase=0.0,waveData[POINTS];/*相位和波形数据变量*/
doublesampleRate=10000.0,freq=100.0;/*采样率和频率变量*/
GetCtrlVal(panelHandle,PANEL_WAVEFORM,&waveForm);
switch(waveForm)
{
case0:
DeleteGraphPlot(panelHandle,PANEL_GRAPH1,-1,VAL_IMMEDIATE_DRAW);break;
case1:
SineWave(POINTS,ample,freq/sampleRate,&phase,waveData);break;
case2:
TriangleWave(POINTS,ample,freq/sampleRate,&phase,waveData);break;
case3:
SawtoothWave(POINTS,ample,freq/sampleRate,&phase,waveData);break;
case4:
SquareWave(POINTS,ample,freq/sampleRate,&phase,50.0,waveData);break;
}
if(waveForm)/*先判断是否选择了波形*/
{
DeleteGraphPlot(panelHandle,PANEL_GRAPH1,-1,VAL_IMMEDIATE_DRAW);
PlotWaveform(panelHandle,PANEL_GRAPH1,waveData,POINTS,VAL_DOUBLE,1.0,0.0,0.0,1.0/sampleRate,VAL_THIN_LINE,VAL_EMPTY_SQUARE,VAL_SOLID,1,VAL_RED);/*画出波形*/
}
}
intCVICALLBACKQuitCallback(intpanel,intcontrol,intevent,
void*callbackData,inteventData1,inteventData2)
{
switch(event)
{
caseEVENT_COMMIT:
QuitUserInterface(0);
break;
}
return0;
}
//“波形选择”对应的回调函数
intCVICALLBACKWaveFormChooseCB(intpanel,intcontrol,intevent,
void*callbackData,inteventData1,inteventData2)
{
switch(event)
{
caseEVENT_COMMIT:
show_wave();
break;
}
return0;
}
6、实验结果