0

私はこの質問が以前に尋ねられたことを理解しています。私は答えを読んで解決策を試しましたが、それは私にとってそれを解決していません。

Ubuntu 10.10(32ビット)とEclipseCIDEでOpenCV2.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);

これの原因はわかりません。:s

引数としてファイルに渡される文字列は正確に次のとおりです:(引用符を含む) "/home/atharva/Documents/FYP/1a.jpg"

ありがとう

4

1 に答える 1

2

ファイル内の文字列から引用符を削除する必要があります。引用符は、シェルのパーサーが最初にプログラムのargvリストにパスを適切に取得するためにのみ必要です。それでも、ファイルパスにスペースが埋め込まれている場合にのみ本当に必要です。

fgets()はテキストの行全体(\ nまで)を読み取るため、何も引用する必要はありません(ただし、ファイルパスには50文字はあまりありません。そのバッファーサイズを増やすことをお勧めします)。また、何らかの理由でファイル内で引用符で囲む必要がある場合は、cvLoadImage()に渡す前にそれらを削除する必要があります。

于 2011-02-10T22:59:25.403 に答える