OpenCV cvLoadImage不接受char * for filename但接受argv [1]

时间:2011-02-10 22:46:15

标签: c file-io opencv char argv

我意识到之前已经问过这个问题。我已经阅读了答案并尝试了解决方案,但它并没有为我解决。

我在Ubuntu 10.10(32位)和Eclipse C IDE中使用OpenCV 2.1。

我的问题:

如果我从文件中读取文本行,并将其存储在char *变量中并将其传递给cvLoadImage,我什么也得不到。我从文件中读取的文本行是指定某个图像的完全定义的文件路径。

这是代码:

FILE *f = fopen("./input.txt","r");
char img1[50];
fgets(img1,50,f);
char* img3 = strtok(img1,"\n");
IplImage* frame = cvLoadImage(img3);

结果是帧现在是0x00000000而没有图片

BUT

如果我将相同的文本作为参数传递给可执行文件,我可以将argv [1]存储到char *中并将其传递给cvLoadImage(),并按预期读取图像。

这是代码:

char* img3 = argv[1];
IplImage* frame = cvLoadImage(img3);

我不确定这是什么原因。 :■

作为参数传递的字符串和文件正是:(包括引号) "/home/atharva/Documents/FYP/1a.jpg"

由于

1 个答案:

答案 0 :(得分:2)

您需要从文件中的字符串中删除引号。引号只需要shell的解析器首先将路径正确地放入程序的argv列表中 - 如果文件路径有嵌入空格,那么只需要真正

由于fgets()读取整行文本(直到\ n),因此无需引用任何内容(尽管50个字符对于文件路径并不多 - 您可能希望增加该缓冲区大小) 。如果由于某种原因必须在文件中引用它,那么你需要在将它传递给cvLoadImage()之前删除它们。