人脸提取部分
interface的工程介绍
参见传送门dll文件缺失
很早之前,在vs2010上写好的interface人脸提取系统,在vs2012上链接失败了,找了很多方法,最后还是需要下载不同的dll【是系统中的dll文件】。注意:如果你是64位系统,就将dll放到sysWOW64下;如果是32位系统,就放到system32下。下载网站选用太平洋下载中心传送门,直接下载好dll,放入到对应文件夹下就可以。opencv版本基础知识
所有官方文档的位置传送门值得注意的是,opencv2.版本支持x86和x64的两种环境,opev3.只支持x64的
一般link不对,是缺少lib,查看编译器里面的lib是否存在
一般运行不对,是缺少动态链接库,查看动态链接库是否放入Debug或者Release文件夹加载CascadeClassifier时,需要增加头文件,否则加载不进去。可以初步实现人脸的识别。但是第二帧开始容易出错。
#include <opencv2/objdetect/objdetect.hpp>
具体opencv的配置工作,参考之前的博客,实际内容和interface工程有重叠的部分
opencv配置
- interface问题
interface由于动态链接库是基于opencv2.4.6生成的,由于没有提供源码,因此不能重新生成动态链接库,所以opencv的版本不能变。为了能让opencv可以在vs2012下运行,下载opencv2.4.6,选择build/x86/vc11下的文件,vc11对应vs2012,vc10对应vs2010,amazing。
但是经过尝试,发现依旧不能编译,看来这个软件只能支持vs2010+opencv2.4.6版本下,才可以正常使用。
include文件,也是选择build文件夹下的include文件
- 加载视频
对于视频加载,需要增加ffmpeg的dll文件
分类器训练部分
- 随机森林
利用opencv实现随机森林,
传送门1
传送门2
传送门3,包含参数含义讲解
cv:Mat使用教程
Mat::push_back #输入也要是mat类型
Mat M(2,2,CV_8UC3, Scalar(0,0,255)); #初始化
M.row(3) = M.row(3) + M.row(5)*3 #对行操作
// now copy the 7-th column to the 1-st column
// M.col(1) = M.col(7); // this will not work
Mat M1 = M.col(1);
M.col(7).copyTo(M1);
// C++ code:
double m[3][3] = {{a, b, c}, {d, e, f}, {g, h, i}};
Mat M = Mat(3, 3, CV_64F, m).inv();
C++使用技巧
atoi(str.c_str()) # string to int
atof(str.c_str()) # string to double