怎样使用OpenCV进行opencv人脸识别算法

可以不用openCV,用C++写一个简单的人脸识别程序么?
一个简单的人脸识别程序,识别函数在openCV里面几行就搞定了。如果自己用C++去写识别函数,工作量会很大么?网上的程序基本上都是基于openCV开发的,有没有不用openCV的代码呢?
按时间排序
OpenCV里面的函数都是打包好的给你用,实际上是非常复杂的数学运算,如果自己来写会非常复杂,我们之前写过一个读取BMP的图像大约用了500行左右,这还只是读取某一种图像格式。不过你可以尝试使用 来做,这个库也有很丰富的图像处理方法。
主要回答最后一个问题。当然有不用OpenCV的。我之前实习的一个公司,他们的代码就是从底层自己做起的(因为他们也做自己的硬件)。不过我想这无论如何都不会是个简单的过程吧,毕竟他们有专门的一个团队写底层的函数库,另外一个团队研究上层的识别算法。
不用opencv的代码估计不会公开吧
来来来,题主,我问下你手写C++的代码,怎么打开JPG。
opencv不是用c写的么?
“识别函数在openCV里面几行就搞定了......”绝不会是几行就搞定了,这几行函数里调用的函数简直了。还是先通读代码搞清原理吧。
我跟你讲,还真的是有的。代码数量,你不会想知道的..
不用OpenCV你把图片读出来就不简单了,别说后面的处理了
你要先告诉大家你为什么要这么做,大家的回答才会有针对性。
你这个所谓的不用OpenCV也其实就是把OpenCV里自己要用到的函数重写了一遍,施主何苦呢?难道想盖层楼真的要从打磨榔头和采矿开始?
不用opencv的话,dlib的人脸检测,还有关键点检测都是很好的。不建议自己从头写,且不说算法,一个内存管理问题都折腾死你,亲身体会。
你首先要明白人脸识别程序包括了哪些流程?(1)不提数据采集了,第一步是图像或视频解码,光图像就有N多种格式:bmp,jpg,png,pgm,ppm等等,每种里面都可能还有细分,比如有损的图像,无损的图像,你都需要自己来写;(2)人脸检测,最简单的就是harr特征,自己写,分类器是adaboost,自己写,人脸检测的训练流程,测试流程,人脸检测模型的读取和输出,都要自己写;(3)人脸识别,最简单的,特征脸eigenface,其中涉及最简单的pca算法,矩阵特征分解算法,自己写,配上最简单的分类器最近邻,计算向量的距离,自己写,人脸识别训练流程,识别流程,自己写;(4)其他的数据预处理,各种IO操作等等;这里面已经是最简单的人脸识别流程了。。。而opencv可以帮你完成上述90%的工作!如果不用opencv或者类似的库,我不知道你能不能写出所有的完整的流程,就算写出来了,我不知道,还能不能说是“简单的”程序?
你要用什么库?
深度学习,这个现成。基于opencv的人脸识别程序-代码_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
基于opencv的人脸识别程序-代码
上传于||文档简介
&&基​于​o​p​e​n​c​v​的​人​脸​识​别​程​序​-​代​码
阅读已结束,如果下载本文需要使用
想免费下载本文?
你可能喜欢opencv人脸检测_一个极其隐秘只有xfgryujk知道的地方吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0可签7级以上的吧50个
本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:924贴子:
opencv人脸检测
我只是把opencv2.4.6的教程改了一下图是随便找的要把分类器OpenCV\data\haarcascades\haarcascade_frontalface_alt.xml和测试图片test.jpg放在程序当前目录图片来自:时间长了点,实际应用时先把图片缩小检测,再把结果按比例放大我唯一的遗憾就是我只有一次生命可以献给我的祖国。——内森·黑尔
要求正面清晰照,可以是...
心形脸脂肪填充设计[GRO...
本吧肯回复我的不超过七...
发疯出绿不欺 双色人面 ...
#include "opencv2/objdetect/objdetect.hpp"#include "opencv2/highgui/highgui.hpp"#include "opencv2/imgproc/imgproc.hpp"#include &stdio.h&/** Function Headers */void detectAndDisplay( Mat frame );/** Global variables *///-- Note, either copy this file from opencv/data/haarscascades to your current folder, or change these locationsString face_cascade_name = "haarcascade_frontalface_alt.xml";CascadeClassifier face_string window_name = "Face detection";/** *
main */int main( void ){ //-- 1. Load the cascade if(!face_cascade.load( face_cascade_name ) ){ printf("--(!)Error loading\n"); return -1; }; //-- 2. Read the image IplImage* img = cvLoadImage("test.jpg", CV_LOAD_IMAGE_COLOR); Mat frame(img); //-- 3. Apply the classifier to the frame if( !frame.empty() ) {
detectAndDisplay( frame ); } else {
printf("--(!)Error!\n"); } waitKey(); cvDestroyWindow(window_name.c_str()); cvReleaseImage(&img);
return 0;}/** * @function detectAndDisplay */void detectAndDisplay( Mat frame ){ std::vector&Rect& Mat frame_
cvtColor( frame, frame_gray, CV_BGR2GRAY ); equalizeHist( frame_gray, frame_gray ); //-- Detect faces double t = (double)cvGetTickCount(); face_cascade.detectMultiScale( frame_gray, faces, 1.1, 2, 0|CV_HAAR_SCALE_IMAGE, Size(30, 30) ); t = (double)cvGetTickCount() -
printf("%gms\n", t/((double)cvGetTickFrequency()*1000.0));
for( size_t i = 0; i & faces.size(); i++ ) {
Point center( faces[i].x + faces[i]./2, faces[i].y + faces[i].height/2 );
printf("Found a face at (%d, %d)\n", center.x, center.y);
ellipse( frame, center, Size( faces[i]./2, faces[i].height/2), 0, 0, 360, Scalar( 255, 255, 255 ), 2, 8, 0 ); } //-- Show what you got imshow( window_name, frame );}命运这种东西是能简单改变的!——前原圭一
带缩小图片的源码原来脸很小的可能缩小后检测不出#include "opencv2/opencv.hpp"#include &stdio.h& /** Function Headers */void detectAndDisplay( IplImage* img ); /** Global variables *///-- Note, either copy this file from opencv/data/haarscascades to your current folder, or change these locationsString face_cascade_name = "haarcascade_frontalface_alt.xml";CascadeClassifier face_string window_name = "Face detection"; /** *
main */int main( void ){  //-- 1. Load the cascade  if(!face_cascade.load( face_cascade_name ) ){ printf("--(!)Error loading\n"); return -1; };   //-- 2. Read the image  IplImage* img = cvLoadImage("test.jpg", CV_LOAD_IMAGE_COLOR);   //-- 3. Apply the classifier to the frame  detectAndDisplay( img );  waitKey();  cvDestroyWindow(window_name.c_str());  cvReleaseImage(&img);   return 0;} /** * @function detectAndDisplay */void detectAndDisplay( IplImage* img ){  IplImage *dst = 0;
//目标图像指针  float scale = 0.8;
//缩放倍数  CvSize dst_
//目标图像尺寸   dst_cvsize.width = (int)(img-&width * scale);  dst_cvsize.height = (int)(img-&height * scale);  dst = cvCreateImage( dst_cvsize, img-&depth, img-&nChannels);  (img, dst, CV_INTER_LINEAR);    std::vector&Rect&  Mat frame(dst), frame_  if(frame.empty()){ printf("--(!)Error!\n"); }   cvtColor( frame, frame_gray, CV_BGR2GRAY );  equalizeHist( frame_gray, frame_gray );  //-- Detect faces  double t = (double)cvGetTickCount();  face_cascade.detectMultiScale( frame_gray, faces, 1.1, 2, 0|CV_HAAR_SCALE_IMAGE, Size(30, 30) );  t = (double)cvGetTickCount() -   printf("%gms\n", t/((double)cvGetTickFrequency()*1000.0));   frame = Mat(img);  cvReleaseImage(&dst);  for( size_t i = 0; i & faces.size(); i++ )  {    Point center( (int)((faces[i].x + faces[i].width/2)/scale), (int)((faces[i].y + faces[i].height/2)/scale) );     printf("Found a face at (%d, %d)\n", center.x, center.y);    faces[i].x/= faces[i].y/= faces[i].width/= faces[i].height/=    ellipse( frame, center, Size( faces[i].width/2, faces[i].height/2 ), 0, 0, 360, Scalar( 255, 255, 255 ), 1 );    rectangle(frame, faces[i], Scalar( 255, 255, 255 ), 1);  }  //-- Show what you got  imshow( window_name, frame );}我是变弱了,但不代表你变强了!——一方通行
效果非常不错!看来样本选的很好!不知LBP会不会这么好
楼主,用你的代码运行结果一闪而过,怎么回事呢?
楼主我好喜欢你
为何我的图片可以显示但是并没有被圈出来呢
楼主好人,已用。
能上传到百度云就更好了
内&&容:使用签名档&&
保存至快速回贴OpenCV4Android--使用Java api做人脸识别_Linux编程_Linux公社-Linux系统门户网站
你好,游客
OpenCV4Android--使用Java api做人脸识别
来源:Linux社区&
作者:zhd320
在上有两种方法使用OpenCV,第一使用OpenCV提供好的库文件,然后调用OpenCV的java api来做图像处理。第二种是使用OpenCV的C++& api,但是需要ndk来创建动态库,然后Android工程间接调用动态库中的函数。
本文主要使用第一种方法,(关于环境的配置,网上很多,个人使用的是 ,其实如果单纯的使用第一种方法,cdt和ndk都不用安装,只需要解压opencv的ok了)
第一步,将opencv解压,拷贝sdk/java到eclipse工程文件夹下
第二步,导入工程,将java导入到eclipse工程中,修改配置(选择android api勾选is library)
api选择必须是11也就是3.0 以上,否则会报错。
--------------------------------------分割线 --------------------------------------
Linux下安装OpenCV2.4.1所需包
Ubuntu 12.04 安装 OpenCV2.4.2
下OpenCV无法读取视频文件
Ubuntu 12.04下安装OpenCV 2.4.5总结
Ubuntu 10.04中安装OpenCv2.1九步曲
基于QT和OpenCV的人脸识别系统
--------------------------------------分割线 --------------------------------------
第三步,建立自己的工程
修改配置,library add刚才添加的java工程即可。(也可修改project.properties文件在最后加上android.library.reference.1=../java,确保java工程和你新建的工程目录是同级的。若没有project.properties,那修改default.properties)
添加成功会出现以下图片,(java_src)
更多详情见请继续阅读下一页的精彩内容:
相关资讯 & & &
& (06月29日)
& (04月25日)
& (05月03日)
& (04月23日)
图片资讯 & & &
   同意评论声明
   发表
尊重网上道德,遵守中华人民共和国的各项有关法律法规
承担一切因您的行为而直接或间接导致的民事或刑事法律责任
本站管理人员有权保留或删除其管辖留言中的任意内容
本站有权在网站内转载或引用您的评论
参与本评论即表明您已经阅读并接受上述条款

我要回帖

更多关于 opencv人脸识别算法 的文章

 

随机推荐