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



