1.包含头文件
在Visual Studio中进行OpenCV的C++编程,首先需要进行“包含说明”,即"#include<xxx>",将一些OpenCV所定义的函数包含进去。这样,在进行编译时,编译器就可以将我们需要的函数编译成需要的功能,而非把它们当做是一堆乱码。
不同的功能需要包含不同的头文件在代码中。
若需要在屏幕上输出文字,则需要“iostream”即“输入输出流”。
若需要使用字符串,则需要“string”。
在不清楚一些应用应该使用哪些包含文件时,可以多看一些OpenCV在“source\sample\cpp”中自带的例程来学习和了解。
2.using namespace
这个功能一般在C++编程中都会见到,但在C编程中我则没有见过。
据说通过增加这个语句“using namespace cv;”可以简化后面所有的代码,即,不需要输入“cv::xxx”,而是只需输入“xxx”即可进行函数或变量的声明或调用。
另一条是“using namespace std;”具体含义我还不是很清楚,但这一句貌似也是必须得使用的。
3.带参数的main函数
以前所见过的简单编程所涉及的main主函数,都是“main()”的样子,或者“int main()”,都是没有参数的主函数。但实际上,很多例程使用的主函数都是有参数的主函数。例如之前我测试的标定相机的例程“calibration.cpp”的主函数就是下面这个样子:
int main( int argc, char** argv )
根据查阅的资料:
argc 是 argument count的缩写,表示传入main函数的参数个数。
argv 是 argument vector的缩写,表示传入main函数的参数序列或指针,并且第一个参数argv[0]一定是程序的名称,并且包含了程序所在的完整路径,所以确切的说需要我们输入的main函数的参数个数应该是argc-1个。
下面的例子可以大概解释这个用法。
若要进行相机标定例程的调试,则需要直接在Visual Studio环境下运行程序,而非通过生成的“exe”文件进行运行,则需要给出main函数的初值,以下:
argc = 6;
argv[0] = "demo.exe";
argv[1] = "-w";
argv[2] = "6";
argv[3] = "-h";
argv[4] = "9";
argv[5] = "imagelist.yaml";
以上方式在C++代码中定义main函数的输入值与如下的在命令行中使用该函数的效果是相同的。
关于带参数的main函数的更详细内容,可以参考以下两篇文章:
https://blog.csdn.net/t247555529/article/details/47836233
https://blog.csdn.net/dcrmg/article/details/51987413