函数调用形参、实参的问题
函数调用时,参数分两种 一种是送进去的参数,一种是想从里面得到的参数。比如:
ExternalRectangle((unsigned char*)(frame->imageData), ObjInfo,widthstep,alarm_flag,&ROI_left,&ROI_right,&ROI_top,&ROI_bottom);
对于这个函数来说:我们需要送进去的参数是rame->imageData ObjInfo,widthstep,
从里面得到的参数是:alarm_flag,&ROI_left,&ROI_right,&ROI_top,&ROI_bottom
一个函数的改动需要动三个地方:
头文件+调用的部分+程序实现的部分
头文件:
//void ExternalRectangle(unsigned char* pRGBIn, MS_ObjectInfo *ObjInfo, int ObjCount, int widthStep);
void ExternalRectangle(unsigned char* pRGBIn, MS_ObjectInfo *ObjInfo, int ObjCount, int widthStep,bool &alarm_flag1,int *alarm_left,int *alarm_right,int *alarm_top,int *alarm_bottom);
函数实现部分:
void ExternalRectangle(unsigned char* pRGBIn, MS_ObjectInfo *ObjInfo, int i1, int widthStep,bool &alarm_flag1,int *alarm_left,int *alarm_right,int *alarm_top,int *alarm_bottom)
2.
*alarm_left= ObjInfo[i1].TarBox.left;
*alarm_right=ObjInfo[i1].TarBox.right;
*alarm_top=ObjInfo[i1].TarBox.top;
*alarm_bottom=ObjInfo[i1].TarBox.bottom;
与
alarm_left= &ObjInfo[i1].TarBox.left;
alarm_right=&ObjInfo[i1].TarBox.right;
alarm_top=&ObjInfo[i1].TarBox.top;
alarm_bottom=&ObjInfo[i1].TarBox.bottom;
的区别:
前者可以实现形参与实参的传递。
下面只能在函数的实现里面,打印出来的数据是对的,不能传递到外部。
3. alarm_flag 被覆盖掉。
改了函数的结构:
4. 现在的问题是:每次检测ROI 区域之后,框自动缩小。