【opencv学习笔记】Harr与LBP级联分类器

# include<opencv2\opencv.hpp>
# include <iostream>

using namespace std;
using namespace cv;

CascadeClassifier face_classifier;
CascadeClassifier eye_classifier;
string facefile = "F:/opencv4.0.1/opencv/build/etc/haarcascades/haarcascade_frontalface_alt.xml";
string LBPfacefile = "F:/opencv4.0.1/opencv/build/etc/lbpcascades/lbpcascade_frontalface.xml";
string eyefile = "F:/opencv4.0.1/opencv/build/etc/haarcascades/haarcascade_eye.xml";
int main(int argc, char** argv) {
    //图片中
	/*if (!face_classifier.load(LBPfacefile)) {
		cout << "can't load face featrue data...";
		return -1;
	}
	Mat src, dst,gray_src;
	src = imread("E:/tuku/text1.jpg");
	if (src.empty()) {
		cout << "can't find this picture...";
		return -1;
	}
	imshow("input", src);
	cvtColor(src, gray_src, COLOR_BGR2GRAY);
	equalizeHist(gray_src, gray_src);
	vector<Rect> faces;
	double t1 = getTickCount();
	face_classifier.detectMultiScale(gray_src, faces, 1.1, 3, 0, Size(24, 24));
	double time = (getTickCount() - t1) / getTickFrequency();
	printf("time:%f", time);
	for (size_t t = 0; t < faces.size(); t++) {
		rectangle(src, faces[t], Scalar(0, 0, 255), 2, 8, 0);
	}
	imshow("faces  detect Image", src);*/

	//视频中

	if (!face_classifier.load(LBPfacefile)) {
		cout << "can't load face featrue data...";
		return -1;
	}
	namedWindow("output", 1);
	VideoCapture capture;
	Mat gray;
	Mat frame;
	vector<Rect> faces;
	capture.open("E:/tuku/text.mp4");
	while (capture.read(frame)) {
		cvtColor(frame, gray, COLOR_BGR2GRAY);
		equalizeHist(gray, gray);
		face_classifier.detectMultiScale(gray, faces, 1.2, 3, 0, Size(30, 30));
		for (size_t t = 0; t < faces.size(); t++) {
			rectangle(frame, faces[t], Scalar(0, 0, 255), 2, 8, 0);
		}
		char c = waitKey(50);
		imshow("output", frame);
		if (c == 27) {
			break;
		}
	}
	capture.release();


	/*//摄像头人脸与眼睛检测
	/*if (!face_classifier.load(facefile)) {
		cout << "can't load face featrue data...";
		return -1;
	}
	if (!eye_classifier.load(eyefile)) {
		cout << "can't load eye featrue data...";
		return -1;
	}
	namedWindow("camera-demo",1);
	VideoCapture captrue(0);
	Mat frame;
	Mat gray;
	vector<Rect> faces;
	vector<Rect> eyes;
	while (captrue.read(frame)) {
		cvtColor(frame, gray, COLOR_BGR2GRAY);
		equalizeHist(gray, gray);
		face_classifier.detectMultiScale(gray, faces, 1.2, 3, 0, Size(30, 30));
		for (size_t t = 0; t < faces.size(); t++) {
			Rect roi;
			roi.x = faces[static_cast<int>(t)].x;
			roi.y = faces[static_cast<int>(t)].y;
			roi.width= faces[static_cast<int>(t)].width;
			roi.height = faces[static_cast<int>(t)].height/2;
			Mat faceROI = frame(roi);
			eye_classifier.detectMultiScale(faceROI, eyes, 1.2, 3, 0, Size(20, 20));
			for (size_t k = 0; k < eyes.size(); k++) {
				Rect rect;
				rect.x = faces[static_cast<int>(t)].x + eyes[k].x;
				rect.y = faces[static_cast<int>(t)].y + eyes[k].y;//因为是在faces的ROI区域找到的eyes
				rect.width = eyes[k].width;
				rect.height = eyes[k].height;
				rectangle(frame, rect, Scalar(0, 255, 0), 2, 8, 0);

			}
			rectangle(frame, faces[t], Scalar(0, 0, 255), 2, 8, 0);
			
		}
		imshow("camera-demo", frame);
		char c = waitKey(30);
		if (c == 27) {
			break;
		}
	}*/
	waitKey(0);
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值