我无法理解,OpenCV中用于加载图像的代码功能是什么。什么是if(argc!= 2)的功能?你能告诉我这件事。
if( argc != 2)
{
cout <<" Usage: display_image ImageToLoadAndDisplay" << endl;
return -1;
}
完整代码:
1 #include <opencv2/core/core.hpp>
2 #include <opencv2/highgui/highgui.hpp>
3 #include <iostream>
4
5 using namespace cv;
6 using namespace std;
7
8 int main( int argc, char** argv )
9 {
10 if( argc != 2)
11 {
12 cout <<" Usage: display_image ImageToLoadAndDisplay" << endl;
13 return -1;
14 }
15
16 Mat image;
17 image = imread(argv[1], CV_LOAD_IMAGE_COLOR); // Read the file
18
19 if(! image.data ) // Check for invalid input
20 {
21 cout << "Could not open or find the image" << std::endl ;
22 return -1;
23 }
24
25 namedWindow( "Display window", CV_WINDOW_AUTOSIZE );// Create a window for display.
26 imshow( "Display window", image ); // Show our image inside it.
27
28 waitKey(0); // Wait for a keystroke in the window
29 return 0;
30 }
答案 0 :(得分:18)
这应该包含在任何C ++(或C,ObjC或相关语言)教程中,例如the GNU tutorial。
C ++程序的main
函数有两个参数,按惯例命名为argc
和argv
,它们为它提供了用于启动程序的命令行参数。
argc
是参数计数,argv
是字符串数组。
程序本身是第一个参数argv[0]
,因此argc
始终至少为1.
因此,当使用一个命令行参数运行程序时,argc
为2
。如果它没有参数或多个参数运行,argc != 2
将为真,因此将打印使用消息“Usage:display_image ImageToLoadAndDisplay”,告诉用户如何正确运行它。
例如,如果你这样做:
$ display_image firstarg "second arg"
值将是:
argc: 3
argv[0]: "display_image"
argv[1]: "firstarg"
argv[2]: "second arg"
值得指出的是,代码在很多方面都很奇怪。使用消息开头的额外空间非常奇怪。 “用法”通常都是小写的。您通常将实际程序名称(argv[0]
)放在字符串中,而不是硬编码的规范名称。用法消息通常转到cerr
,而不是cout
。并且惯例是为用户错误的错误返回正数,对于无效参数通常为2,而不是-1。您可以在源代码中找到更好的argc
/ argv
处理示例,几乎可以在Unix命令行中使用任何工具(尽管大多数工具都比较复杂,通常使用像{{{{}}这样的库。 1}}从文件参数等解析出选项。)。
答案 1 :(得分:2)
argc
=争论计数。这用于确定数量
命令行争论一个程序运行。argv
被称为争论向量,它包含所有命令行参数的名称,包括程序的名称。your_program
和another_file
。如果argc不是2,这意味着它是
等于1或大于2,因为这不是什么
程序想要,代码中止进一步执行