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

這樣便能實現數組數據的傳入和處理後結果的傳遞了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章