我意识到之前已经问过这个问题。我已经阅读了答案并尝试了解决方案,但它并没有为我解决。
我在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"
由于
答案 0 :(得分:2)
您需要从文件中的字符串中删除引号。引号只需要shell的解析器首先将路径正确地放入程序的argv列表中 - 如果文件路径有嵌入空格,那么只需要真正。
由于fgets()读取整行文本(直到\ n),因此无需引用任何内容(尽管50个字符对于文件路径并不多 - 您可能希望增加该缓冲区大小) 。如果由于某种原因必须在文件中引用它,那么你需要在将它传递给cvLoadImage()之前删除它们。