在以下用于在openCV中加载和显示图像的程序
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int main( int argc, char** argv )
{
if( argc != 2)
{
cout <<" Usage: display_image ImageToLoadAndDisplay" << endl;
return -1;
}
Mat image;
image = imread(argv[1], CV_LOAD_IMAGE_COLOR); // Read the file
if(! image.data ) // Check for invalid input
{
cout << "Could not open or find the image" << std::endl ;
return -1;
}
namedWindow( "Display window", CV_WINDOW_AUTOSIZE );// Create a window for display.
imshow( "Display window", image ); // Show our image inside it.
waitKey(0); // Wait for a keystroke in the window
return 0;
}
我无法理解程序员如何指定输入图像。这是因为argv [1]只是一个数组元素,我认为与要指定的图像无关,并且它尚未在程序中的任何位置定义。任何人都可以清楚我的怀疑吗?
还有一件事:检查是否(argc!= 2)的“if”语句中检查了什么?
答案 0 :(得分:6)
main( int argc, char** argv )
| |
| |
| +----pointer to supplied arguments
+--no. of arguments given at command line (including executable name)
示例:
display_image image1.jpg
下面,
argc will be 2
argv[0] points to display_image
argv[1] points to image1
if(argc !=2 )
^^ Checks whether no. of supplied argument is not exactly two
答案 1 :(得分:1)
该程序应从命令行调用,其中一个参数指定文件名:
$ display_image filename.jpg
在这种情况下,argv[1]
将是指向字符串“filename.jpg”的指针。
答案 2 :(得分:1)
当用户从命令行界面运行程序时,他们可以在键入程序名称后指定文件的路径:imdisplay image.jpg
argc
包含总参数的数量,包括程序的名称。因此,如果用户未键入图像名称,则argc
为1. argv
是char*
的大小为argc
的数组。所以argv[0]
是用户输入的程序名称,argc[1]
是第一个参数。
if (argc != 2)
。
答案 3 :(得分:0)
如果您使用的是 Visual Studio
argv [1]对应于 [项目属性] -> [配置属性] -> [Debug]
它可以设置图像名称和地址