2016-10-12 7 views
0

나는 이미지를 파일 폴더에서 벡터로 읽으려고한다. 그러나 내 이미지 매트가 벡터로 push_back하지 못하는 것 같습니다.Opencv push_back image 매트를 벡터에 넣기 <Mat>

cout << "img vec:" << imgs[0].rows << " " << imgs[0].cols << endl;의 결과는 img vec:0 0입니다.

나는 imgs.push_back(img.clone());imgs.push_back(img);을 모두 시도했습니다. 정말 미안 해요

#include "stdafx.h" 
#include <stdio.h> 
#include <stdlib.h> 
#include <iostream> 
#include <fstream> 
#include <algorithm> 
#include <dirent.h> 
#include <opencv/cv.h> 
#include <opencv2/core/core.hpp> 
#include <opencv2/imgproc/imgproc.hpp> 
#include <opencv2/highgui/highgui.hpp> 

using namespace cv; 
using namespace std; 

void readImageFiles(string dirName, vector<cv::Mat> &imgs); 

int _tmain(int argc, _TCHAR* argv[]){ 
    vector<cv::Mat> imgs; 
    readImageFiles("training/", imgs); 

    cout << imgs.size() << endl; 
    cout << imgs[0] << endl; 
    /* 
    for(int i = 0; i < imgs.size(); i++){ 
     imshow("img", imgs[i]); 
     waitKey(); 
    } 
    */ 
    system("pause"); 
    return 0; 
} 


void readImageFiles(string dirName, vector<cv::Mat> &imgs){ 

    DIR *dir; 
    dir = opendir(dirName.c_str()); 
    struct dirent *ent; 
    if (dir != NULL) { 
     while ((ent = readdir (dir)) != NULL) { 
      string imgPath(dirName + ent->d_name); 
      Mat img = imread(imgPath); 
      //cvtColor(img,img,CV_BGR2GRAY); 
      imgs.push_back(img.clone()); 
      cout << "img:" << img.rows << " " << img.cols << endl; 
      cout << "img vec:" << imgs[0].rows << " " << imgs[0].cols << endl; 
     } 
    }else{ 
     cout << "NULL" << endl; 
    } 

} 
+0

당신은'imgs.emplace_back (imread (imgPath));'시도 했습니까? – 1201ProgramAlarm

+0

아직 시도했지만 아무 것도 없습니다. 귀하의 제안에 감사드립니다! – user4029119

+0

과'cout << "의 출력 img :"<< img.rows << ""<< img.cols << endl; "은"img : 0 0 "'이 아닙니까? – Micka

답변

0

:

여기 내 코드입니다. 나는 지금 문제가 어디서 왔는지를 안다!

imgs[0]의 행과 열을 인쇄했기 때문에 벡터의 매트가 비어 있다고 생각했습니다. 그러나 파일 디렉토리를 읽는 동안 처음 두 파일을 무시하는 것을 잊지 마십시오. 처음 두 파일은 이미지가 아니지만 ./../입니다. 따라서이 두 파일을 건너 뛰어도 문제가 해결됩니다.