2017-07-12 131 views
-3
#include <algorithm> 

#include <opencv2/core/core.hpp> 
#include <opencv2/highgui/highgui.hpp> 

#include "kcftracker.hpp" 

#include <dirent.h> 

using namespace std; 
using namespace cv; 

int main(int argc, char* argv[]){ 

    if (argc > 5) return -1; 

    bool HOG = true; 
    bool FIXEDWINDOW = false; 
    bool MULTISCALE = true; 
    bool SILENT = true; 
    bool LAB = false; 

    for(int i = 0; i < argc; i++){ 
     if (strcmp (argv[i], "hog") == 0) 
      HOG = true; 
     if (strcmp (argv[i], "fixed_window") == 0) 
      FIXEDWINDOW = true; 
     if (strcmp (argv[i], "singlescale") == 0) 
      MULTISCALE = false; 
     if (strcmp (argv[i], "show") == 0) 
      SILENT = false; 
     if (strcmp (argv[i], "lab") == 0){ 
      LAB = true; 
      HOG = true; 
     } 
     if (strcmp (argv[i], "gray") == 0) 
      HOG = false; 
    } 

    // Create KCFTracker object 
    KCFTracker tracker(HOG, FIXEDWINDOW, MULTISCALE, LAB); 

    // Frame readed 
    Mat frame; 

    // Tracker results 
    Rect result; 

    // Path to list.txt 
    ifstream listFile; 
    string fileName = "C:\\Users\PeterLin\Documents\Visual Studio 2015\Projects\Project7\x64\Debug\ball\images.txt"; 
    listFile.open(fileName); 

このコードを実行するたびに、文字列を読み込む際にエラーが発生し、ファイル名を取得できません。私はその理由が不思議です。文字列の文字の読み込み中にエラーが発生しました。

+2

。 '\ P'は有効なエスケープではありません。あなたはそれについて警告を受けたと思う。 – VTT

+0

最初のバックスラッシュを2倍にしたので、あなたはそれを知っているようでした。なぜ同じ理由で残りの部分を二重にしなかったのですか? – Barmar

+2

代わりにスラッシュを使用することもできます。 Windowsは非常に長い間、どちらのタイプのスラッシュもファイル名に使用できました。 – Barmar

答えて

0

あなたは\エスケープしていません。

エスケープしすぎると痛みが大きくなります。通常は、逐語的な文字列リテラルを試してみてください。 接頭辞として使用され、エスケープ文字を無視するようにコンパイラに要求します。正規表現を書くときに非常に便利です。

はここで読んだことがあります:あなたは\適切にエスケープする必要があります http://stroustrup.com/C++11FAQ.html#raw-strings

+0

コードをfileName = "C:/ Users/PeterLin/Documents/Visual Studio 2015/Projects/Project7/x64/Debug/ball/images.txt"に変更しようとしました。同じ問題が存在します。ありがとうございました。 – jianzhelin

+0

他のプログラムがファイルにアクセスしている可能性はありますか? (テキストエディタなど)。私は本当にそれが許可の問題だとは思わないし、あなたは正しい道があると思う。 – user3621843

関連する問題