OpenCV:带有CSV文件的特征面
OpenCV: Eigenfaces with CSV file
我已经为这个问题苦苦挣扎了一段时间,也许这里有人可能会对出了什么问题提出建议。我正在尝试使用libfacerec从这个网站在OpenCV中实现Eigenfaces: https://github.com/bytefish/libfacerec 我正在使用OpenCV-2.3.1和Visual Studio 2010
示例代码使用此站点中的orl_faces数据集:使用 csv 文件 http://www.cl.cam.ac.uk/research/dtg/attarchive/facedatabase.html 和加载这些图像。在此文件中,列出了所有 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 文件夹中的主.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.
}
整个项目构建良好,没有任何错误,但是当我尝试运行时会发生崩溃。我进入调试模式,并认为矢量
所以我的问题,出了什么问题?为什么在填充高度和宽度时不填充两个向量?
编辑:似乎在我的另一台电脑上正确填充了两个矢量(矢量图像 [400],矢量标签 [400]。但是程序仍然崩溃,运行调试时发现此错误:
在 Test.exe 中0x77c415de处未处理的异常:0xC0000005:访问冲突写入位置0x00000000。
它位于 mat.hpp 文件中,当单步执行此文件时,向量 v 显示以下错误:[尺寸] CXX0030:错误:无法计算表达式[容量CXX0030:错误:无法计算表达式
确定问题是这个。
您正在链接库:
opencv_core231.lib
opencv_highgui231.lib
opencv_imgproc231.lib
然后使用 Visual Studio 中的调试配置进行生成。看到问题了吗?如果要执行此操作,请切换到opencv_core231d.lib
库。但是:由于一些神秘的原因,OpenCV2.3.1超级包没有附带tbb_debug.dll
,因此调试构建将失败。如果您正在使用超级包并想使用 libfacerec,请在 Visual Studio 中激活发布构建配置,构建并运行,一切都会正常工作。
我已经写了一个教程,应该很容易遵循:http://www.bytefish.de/blog/opencv_visual_studio_and_libfacerec。滚动到最底部以查看 Windows 中的特征面。所以你看,它确实有效。
- .cpp和.h文件中的模板专用化声明
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- 文本文件中的单词链表
- CMake-按正确顺序将项目与C运行时对象文件链接
- 使用新行和不使用新行读取文件
- 致命错误:特征/密集:VSC 中没有此类文件或目录
- c ++:如何为每个特征制作特定的二进制文件(可执行文件)?
- 如何在 C++ 中使用特征库导入矩阵市场文件
- 从文件读取矩阵到特征 mpfr 时出现分段错误
- MEX文件实现特征库伪内函数崩溃
- 特征库 --> 使用文件或现有 std::vector<string> content (c++) 中的数据初始化矩阵
- 打印文件的分段故障特征
- XML文件中Haar级联正面人脸检测的特征向量大小是多少
- OpenCV:带有CSV文件的特征面
- 如何读取CSV文件并分配给特征矩阵
- 初始化头文件中的常量特征矩阵
- 如何从二进制文件中写入/读取特征矩阵
- 如何从文件中读取特征矩阵
- 致命错误:特征/密集:没有这样的文件或目录
- OpenCV将PCA特征向量写入yaml文件,丢失精度