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]);

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

  • 14
    点赞
  • 60
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值