c++函数调用,函数编写(写自己的函数)以及数组调用,传递

2021-02-03 10:40:22 浏览数 (1)

参考链接: C 函数

在matlab里.m文件分执行文件和函数文件 在c 中执行文件指:main函数 函数文件:其他所有需要用到的函数 

在c 中,函数文件名没有特殊讲究,将文件添加到工程目录便能使用  对函数的要求有三点 

函数的完整文件 输入参数的定义 函数声明加入头文件 

1.函数的完整文件 

#include <opencv2/opencv.hpp>

using namespace cv;

void cameracapture(Mat &frame, int mytime, int imageWidth,int imageHeight)

{

    char c = 0;

    VideoCapture capture(0);

    capture.set(CV_CAP_PROP_FRAME_WIDTH, imageWidth*2);//宽度2560

    capture.set(CV_CAP_PROP_FRAME_HEIGHT, imageHeight);//高度720

    for (int i=0; i < mytime; i )

    {

        capture >> frame;

    }

}

函数的完整文件包括了函数需要的头文件 

 #include <opencv2/opencv.hpp>

 using namespace cv;

以及剩下的函数的程序段 这里解释一下加&和不加&的区别 Mat &frame 加&的变量传递的是变量地址,直白的理解为,加了后我在函数中对该变量修改后,会对我的主函数main中的对应变量进行修改。这里我的程序是打开相机,并把拍摄图像返回main函数,因此我需要随时根据拍摄修改我的main函数中frame的值。 int mytime, int imageWidth,int imageHeight这些则是传入值,在函数内进行修改后不影响main里面的值,因为这些值只传入函数,而不需要函数再传回主函数。 这里还有一点编程技巧 我们通过函数调用的方式进行运算,有两种方式得到运算结果 ①设置函数的返回值,return ②将传入值的地址(即传入值自身)交给函数,函数对其进行运算相当于直接对传入值进行运算。 

2.输入参数的定义 

我们在main中调用其他函数时,我们的输入参数需要提前定义 

main ()

{

Mat frame; 

int mytime = 10;

int imageWidth = 1280;

int imageHeight = 720;

cameracapture(frame, mytime, imageWidth, imageHeight);//注意这里和函数定义不同

………………

}

3.函数声明加入头文件 

我们调用其他函数前必须先声明 将 

 void cameracapture(Mat &frame, int mytime, int imageWidth,int imageHeight)

写入.h文件(头文件),写入头文件后也就告知了我们的项目,我们声明了,项目中是有该函数的定义的。为什么要用头文件?因为我们把我们用到的函数声明都写到一个.h文件里,下次再使用时我们直接#include XXX.h即可,没有必要再对用到的函数一个一个地声明。 

完成上面的三步,我们自己的函数就制作好了,使用起来比较方便。 这里再扩展一下 我们在数组传入函数,传出函数时可能会面临着数组无法修改的问题,这里二郎给大家提供一个解决办法,不是最优,但是可行 main里面: 

float key_data[10][4] = { 0 };

my_f(img_cir_L, img_cir_R, key_data);

函数里面: 

void my_f(Mat rectifyImageL, Mat rectifyImageR, float(&key_data)[10][4])

头文件里面: 

 void my_f(Mat rectifyImageL, Mat rectifyImageR, float(&key_data)[10][4]);

这样便能实现数组数据的传入和处理后结果的传递了

0 人点赞