(四)OpenCV级联分类器训练与使用_03_Haar与LBP级联分类器的比较

Hasana ·
更新时间:2024-09-20
· 937 次阅读

HAAR与LBP的区别(Haar的xml文件大)(LBP的xml文件小)
HAAR特征是浮点数计算
LBP特征是整数计算
LBP训练需要的样本数量要比HAAR大
同样的样本空间,HAAR训练出来的数据检测结果要比LBP准确
扩大LBP的样本数据,训练结果可以跟HAAR一样
LBP的速度一般可以比HAAR快几倍 #include #include using namespace std; using namespace cv; String Haar_fileName = "haarcascade_frontalface_alt.xml";//Haar String LBP_fileName = "lbpcascade_frontalface.xml";//LBP CascadeClassifier face_Haar_cascade; CascadeClassifier face_LBP_cascade; int main(int argc, char** argv) { if (!face_Haar_cascade.load(Haar_fileName)) { cout << "Haar_cascade error" << endl; return -1; }; if (!face_LBP_cascade.load(LBP_fileName)) { cout << "LBP_cascade error" << endl; return -2; }; Mat src, gray; src = imread("C:/Users/good/Desktop/test14.jpg"); if (src.empty()) { cout << "could not load image1..." << endl; return -3; } //namedWindow("src", WINDOW_AUTOSIZE); //imshow("src", src); cvtColor(src, gray, COLOR_BGR2GRAY);//转换为灰度 equalizeHist(gray, gray);//直方图均衡化 vector faces; int st = getTickCount();//返回从操作系统启动所经过(elapsed)的毫秒数,它的返回值是DWORD face_Haar_cascade.detectMultiScale(gray, faces, 1.1, 3, 0, Size(30,30)); int nd = (getTickCount() - st); cout << "Haar耗时:" << nd << endl; vector _faces; int _st = getTickCount(); face_LBP_cascade.detectMultiScale(gray, _faces, 1.1, 3, 0, Size(30, 30)); int _nd = (getTickCount() - _st); cout << "LBP耗时:" << _nd << endl;//LBP耗时更短,检测更快 for (size_t i = 0; i < faces.size(); i++) { //绘制矩形 rectangle(src, faces[i], Scalar(255, 0, 0), 2, 8, 0); } imshow("显示", src); waitKey(0); return 0; }

输出结果:
在这里插入图片描述


作者:丶小早



lbp 训练 分类 分类器 opencv

需要 登录 后方可回复, 如果你还没有账号请 注册新账号