我很努力解決這個問題很長一段時間了,也許這裏的某個人可能會提出一個錯誤的建議。我試圖用libfacerec從這個網站實現OpenCV的特徵臉:https://github.com/bytefish/libfacerec我使用的OpenCV-2.3.1與Visual Studio 2010OpenCV:使用CSV文件的特徵臉
的示例代碼使用本站的orl_faces數據集:http://www.cl.cam.ac.uk/research/dtg/attarchive/facedatabase.html並使用csv文件加載這些圖像。在這個文件中列出了所有400幅圖像的全部路徑(40個不同人的10幅圖像),並且每個人都附有標籤。兩個條目都由「;」分隔。我已經在下面添加了這個csv文件的幾行:
C:/Users/PIMMES/Documents/libraries/orl_faces/s1/1.pgm;0
C:/Users/PIMMES/Documents/libraries/orl_faces/s1/2.pgm;0
...
C:/Users/PIMMES/Documents/libraries/orl_faces/s2/1.pgm;1
C:/Users/PIMMES/Documents/libraries/orl_faces/s2/2.pgm;1
...
etc
我已經添加了一段代碼,下面應該加載圖像數據。這也正是在從libfacerec網站在/ src文件夾中的main.cpp文件中列出的同一段代碼:
void read_csv(const string& filename, vector<Mat>& images, vector<int>& labels, char separator = ';')
{
std::ifstream file(filename.c_str(), ifstream::in);
if (!file) throw std::exception();
string line, path, classlabel;
while (getline(file, line))
{
stringstream liness(line);
getline(liness, path, separator);
getline(liness, classlabel);
images.push_back(imread(path, 0));
labels.push_back(atoi(classlabel.c_str()));
}
}
int main(int argc, const char *argv[])
{
// check for command line arguments
if(argc != 2)
{
cout << "usage: " << argv[0] << " <csv.ext>" << endl;
exit(1);
}
// path to your CSV
string fn_csv = string(argv[1]);
// images and corresponding labels
vector<Mat> images;
vector<int> labels;
// read in the data
try
{
read_csv(fn_csv, images, labels);
}
catch (exception& e)
{
cerr << "Error opening file \"" << fn_csv << "\"." << endl;
exit(1);
}
// get width and height
int width = images[0].cols;
int height = images[0].rows;
// get test instances
Mat testSample = images[images.size() - 1];
int testLabel = labels[labels.size() - 1];
...
etc.
}
整個項目構建罰款沒有任何錯誤,但是當我嘗試運行崩潰發生。我進入調試模式,並認爲這兩個矢量<馬特>圖像和矢量< int>標籤(不介意沒有它們的空間導致它不會顯示在這裏)仍然是0這意味着沒有數據是加載。然而,當我打印變量的高度和寬度時,它顯示兩個(從orl_faces所有圖像都是140x140像素)
所以我的問題,出了什麼問題?爲什麼不是在填充高度和寬度時都填充矢量?
編輯:看來,這兩個向量在我的其他電腦正確填寫(矢量圖像[400],矢量標籤[400]然而程序仍然崩潰和運行調試時,我發現這個錯誤:
0000005:在0x77c415de在將Test.exe未處理的異常。訪問衝突寫入位置00000000
它位於mat.hpp文件,通過這個文件步進時,向量v顯示這些錯誤: 【規格】CXX0030 :錯誤:無法評估表達式 [容量CXX0030:錯誤:無法評估表達式
當你說矢量爲零時,你的意思是它們的長度爲零嗎? read_csv函數還返回一個錯誤代碼? – TomP89 2012-04-18 08:00:28
我編輯了我的帖子,看起來我的另一臺電腦上的矢量被正確填充,但此時該程序仍然崩潰 – pimmes111 2012-04-18 08:32:54