OpenCV与C++函数分文件编写——如何设置调用参数为Mat类的函数分文件编写(Mat类实参如何传给子函数)

在实际应用开发中,由于项目很大,我们往往需要进行函数的分文件编写。函数分文件编写可以让代码结构更加清晰易读。
函数分文件编写主要包括四步:

  1. 创建后缀名为.h的头文件
  2. 创建后缀名为.cpp的源文件
  3. 在头文件中写函数的声明
  4. 在源文件开头包含头文件#include"XX"

比如来看一个示例:
swap.h:(.h头文件放到Visual Studio的头文件中)
OpenCV与C++函数分文件编写——如何设置调用参数为Mat类的函数分文件编写(Mat类实参如何传给子函数)_第1张图片
swap.cpp:(子函数,放在Visual Studio的源文件中)
OpenCV与C++函数分文件编写——如何设置调用参数为Mat类的函数分文件编写(Mat类实参如何传给子函数)_第2张图片
主函数:(主函数,也放在Visual Studio的源文件中)
OpenCV与C++函数分文件编写——如何设置调用参数为Mat类的函数分文件编写(Mat类实参如何传给子函数)_第3张图片
通过一个例子,你可能就明白函数的分文件编写了,如果还不明白,可以参考C++教程:https://www.bilibili.com/video/BV1et411b73Z?p=55


下面重点介绍一下带有Mat类的函数分文件编写。

任务要求:建立一个绘制灰度直方图的子函数,并且用函数分文件编写显示。

步骤同样是这四步:

1. 创建后缀名为.h的头文件

这里新建一个depth_hist.h的头文件

OpenCV与C++函数分文件编写——如何设置调用参数为Mat类的函数分文件编写(Mat类实参如何传给子函数)_第4张图片

2. 创建后缀名为.cpp的源文件

分别创建main.cpp和depth_hist.cpp,并且分别写入主函数和子函数相关内容。
如main.cpp:
OpenCV与C++函数分文件编写——如何设置调用参数为Mat类的函数分文件编写(Mat类实参如何传给子函数)_第5张图片
depth_hist.cpp:
OpenCV与C++函数分文件编写——如何设置调用参数为Mat类的函数分文件编写(Mat类实参如何传给子函数)_第6张图片

3. 在头文件中写函数的声明

理论上,将子函数文件的第一行void XXX复制到头文件中再加上;即可实现,但在实际使用中我发现编译器会报一个错误:
OpenCV与C++函数分文件编写——如何设置调用参数为Mat类的函数分文件编写(Mat类实参如何传给子函数)_第7张图片
总之就是未声明Mat的标识符。经过多方查阅资料,我终于发现因为Mat是opencv里的文件,所以要标明,即要添加using namespace cv,而由于头文件中无法使用using namespace cv,因此需要增加cv::才行。
最终语句:
OpenCV与C++函数分文件编写——如何设置调用参数为Mat类的函数分文件编写(Mat类实参如何传给子函数)_第8张图片

4. 在源文件开头包含头文件#include"XX"

分别在main.cpp和depth_hist.cpp中包含头文件:

#include"depth_hist.h"

最终,main.cpp程序如图:
OpenCV与C++函数分文件编写——如何设置调用参数为Mat类的函数分文件编写(Mat类实参如何传给子函数)_第9张图片
depth_hist.cpp部分程序如图:

OpenCV与C++函数分文件编写——如何设置调用参数为Mat类的函数分文件编写(Mat类实参如何传给子函数)_第10张图片

ok,以上便是全部内容了,如果对你有所帮助,记得点个赞哟~

你可能感兴趣的