在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]);
这样便能实现数组数据的传入和处理后结果的传递了
本文系转载,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文系转载,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。