0

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

我在 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 并且没有图片

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

这是代码:

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

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

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

谢谢

4

1 回答 1

2

您需要从文件中的字符串中删除引号。只有 shell 的解析器首先需要引号才能将路径正确地放入程序的 argv 列表中——即使这样,也只有在文件路径包含嵌入空格时才真正需要。

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

于 2011-02-10T22:59:25.403 回答