c++人脸特征保存到本地_javacv:调取本地摄像头,抓取人脸,保存为图片

import staticorg.bytedeco.javacpp.opencv_imgproc.COLOR_BGRA2GRAY;import staticorg.bytedeco.javacpp.opencv_imgproc.cvtColor;import staticorg.bytedeco.javacpp.opencv_imgproc.rectangle;import staticorg.bytedeco.javacpp.opencv_imgproc.resize;importjavax.swing.JFrame;importorg.bytedeco.javacpp.opencv_core.Mat;importorg.bytedeco.javacpp.opencv_core.Rect;importorg.bytedeco.javacpp.opencv_core.RectVector;importorg.bytedeco.javacpp.opencv_core.Scalar;importorg.bytedeco.javacpp.opencv_core.Size;importorg.bytedeco.javacpp.opencv_imgcodecs;importorg.bytedeco.javacpp.opencv_objdetect.CascadeClassifier;importorg.bytedeco.javacv.CanvasFrame;importorg.bytedeco.javacv.Frame;importorg.bytedeco.javacv.FrameGrabber.Exception;importorg.bytedeco.javacv.OpenCVFrameConverter;importorg.bytedeco.javacv.OpenCVFrameGrabber;/*** 调用本地摄像头窗口视频

*

*@authoreguid

*@version2016年6月13日

*@seejavavcCameraTest

*@sincejavacv1.2*/

public classFaceDetect {public static void main(String[] args) throwsException, InterruptedException {//里面的整数值代表第N个摄像头,电脑内置默认为0,外置的从1开始

OpenCVFrameConverter.ToMat converterToMat = newOpenCVFrameConverter.ToMat();

OpenCVFrameGrabber grabber= new OpenCVFrameGrabber(0);

grabber.start();//开始获取摄像头数据

CanvasFrame canvas = new CanvasFrame("摄像头");//新建一个窗口

canvas.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

canvas.setAlwaysOnTop(true);

Frame videoFrame= null;

Mat videoMat= null;while (true) {if (!canvas.isDisplayable()) {//窗口是否关闭

grabber.stop();//停止抓取

grabber.close();

System.exit(2);//退出

}//获取摄像头图像并放到窗口上显示, 这里的Frame是一帧视频图像

videoFrame =grabber.grab();

videoMat=converterToMat.convert(videoFrame);

Mat videoMatGray= newMat();//图片灰度处理,更容易识别出人脸

cvtColor(videoMat, videoMatGray, COLOR_BGRA2GRAY);

Mat detectFace=detectFace(videoMat);

videoFrame=converterToMat.convert(detectFace);

canvas.showImage(videoFrame);//显示带方框的人脸

Thread.sleep(50);//50毫秒刷新一次图像

}

}/*** 人脸检测

*

*@paramvideoMat

*@return*@throwsException*/

public static Mat detectFace(Mat videoMat) throwsException {

System.out.println("Running DetectFace ... ");//从配置文件lbpcascade_frontalface.xml中创建一个人脸识别器,该文件位于opencv安装目录中

CascadeClassifier faceDetector = newCascadeClassifier("D:\\app\\opencv3.4.2\\sources\\data\\haarcascades\\haarcascade_frontalface_alt.xml");//在图片中检测人脸

RectVector faces = newRectVector();

faceDetector.detectMultiScale(videoMat, faces);

System.out.println(String.format("Detected %s faces", faces.size()));

Rect[] rects=faces.get();if (rects != null && rects.length >= 1) {for(Rect rect : rects) {

rectangle(videoMat, rect, Scalar.RED);

saveFace(videoMat, rect);

}

}

faceDetector.close();returnvideoMat;

}/*** 抓取人脸保存为图片

*

*@paramimage

*@paramrect*/

private static voidsaveFace(Mat image, Rect rect) {

Mat sub= image.rowRange(rect.y(), rect.y() + rect.height()).colRange(rect.x(), rect.x() +rect.width());

Mat mat= newMat();

Size size= new Size(100, 100);

resize(sub, mat, size);

opencv_imgcodecs.imwrite("d:\\test\\capture\\" + System.currentTimeMillis() + ".png", mat);

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值