引言
在实际的项目,我们的代码是需要交给测试人员测试的,在测试人员没有源码的情况下(一方面是源码需要更多的运行环境及配置,另一方面,源码具有个人劳动成果的因素)。就需要将代码内容打包,让测试人员直接运行。
方法
以下面代码为例,通过命令行的形式,运行程序:
#include <iostream>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#ifdef _DEBUG
#pragma comment(lib,"opencv_world340d.lib")
#else
#pragma comment(lib,"opencv_world340.lib")
#endif
using namespace cv;
using namespace std;
int main(int argc, char *argv[])
{
cout << "---------------说明-----------------" << endl;
cout << "输入参数都以char数组存在argv[i]" << endl;
cout << "输入参数argv[0]是exe的路径" << endl;
cout << "----------------全部参数----------------" << endl;
cout << "输入参数总数是:" << argc << endl;
for (int i = 0; i < argc; i++)//输出所以命令行的参数(第一个默认是exe全路径)
{
cout << "第" << i+1 << "个参数是:" << argv[i] << endl;
}
Mat img = imread(argv[1]);//读取命令行的第二个参数,作为图像路径
namedWindow("原画");
imshow("原画", img);
waitKey(0);
}
1.如果直接运行,则报错:
原因分析:
在读取图像一行中
Mat img = imread(argv[1]);//读取命令行的第二个参数作为图像的路径
而我们直接运行时,命令行代码:argv[1]中是空的,没有内容(默认只有argv[0]中有内容,是程序执行代码的exe全路径,在debug或者release目录下,如果运行文件被移动到其他地方,也就是新位置的全路径)
在运行的结果也可以看出:
2.通过命令行运行
运行方法:在exe文件夹 shift+鼠标右键 从命令行进入当前文件夹
显示如图(我的是mac上的Parallels版本的win10):
3.输入exe的名称(由于就在该目录下运行,所以默认可以不输入全路径)
直接输入报错:
按照提示,修改为.\OpenCV.exe才可以
4.更多参数的情况
5.这个运行过程由于1.bmp和exe在同一级目录下,所以不用加全路径
结论
通过这个简单案例,可以实现,命令行运行程序的目的。至此,我们只需要将exe和所需要的资源(如1.bmp)发送给测试人员,测试人员就可以完成代码测试,也可以被其他程序直接调用,而不用担心源码泄露和环境布置问题。
注意:
(1)本程序结尾加了watkey(0),所以只有关闭显示的“原图”窗口程序才可以结束运行。
(2)不论第一个参数是否输入exe的全路径,系统都会得到exe的全路径(当然前提是运行正确的情况下)。