2016-09-30 31 views
0

當我使用vs2013 + opencv3.0來運行我的項目時,我發現函數「imread」無法讀取圖像,除非image_list中只有一行。有人說這是因爲「readImageList」函數可以'我不知道該怎麼辦。任何人都可以解決這個問題嗎?爲什麼readImageLists無法讀取txt文件中的圖像列表?

string model_path = "E:\\images\\opencv3.0\\opencv_contrib-master\\modules\\dpm\\samples\\data\\inriaperson.xml"; 
string image_dir = "E:\\images\\opencv3.0\\DPMopencv\\INRIAPerson"; 
string image_list = "E:\\images\\opencv3.0\\DPMopencv\\INRIAPerson\\Test\\pos1.lst"; 
if(model_path.empty() || image_dir.empty()) 
{ 
    help(); 
    return -1; 
} 

vector<string> imgFileList; 
if (!readImageLists(image_list, imgFileList)) 
    return -1; 
for (size_t i = 0; i < imgFileList.size(); i++) 
{ 
    double t = (double) getTickCount(); 
    vector<DPMDetector::ObjectDetection> ds; 

    string imageFile = image_dir + "\\" + imgFileList[i]; 
    Mat image = imread(imageFile); 

    frame = image.clone(); 

    if (image.empty()) { 
     cerr << "\nInvalid image:\n" << imgFileList[i] << endl; 
     return -1; 
    } 
+0

除非列出的文件是在Linux中創建和你從窗戶讀它,有不應該有任何問題。在調用'imread'之前,請確認圖像的完整路徑是否正確。此外,將代碼發佈爲_formatted code_而不是圖像。請參閱[問] – Miki

回答

0

我已經改變了方式來閱讀image_list文件解決了這個問題:

string model_path = "E:\\images\\opencv3.0\\opencv_contribmaster\\modules\\dpm\\samples\\data\\inriaperson.xml";

if (model_path.empty()) 
{ 
    help(); 
    return -1; 
} 
Mat frame; 
string Image; 
ifstream fin("E:\\images\\opencv3.0\\DPMopencv\\INRIAPerson\\pos.lst"); 

for (int i = 1; i <= 100 && getline(fin, Image); i++) 
{ 
    double t = (double)getTickCount(); 
    vector<DPMDetector::ObjectDetection> ds; 
     Image = "E:\\images\\opencv3.0\\DPMopencv\\INRIAPerson\\" + Image; 
     Mat frame = imread(Image); 
     Mat image = frame.clone(); 
     imshow("init", frame); 
    if (Image.empty()) { 
     cerr << "\nInvalid image:\n" << endl; 
     return -1; 
} 
相關問題