实例介绍
【实例截图】
【核心代码】
#include "dialogin.h" #include "ui_dialogin.h" Dialogin::Dialogin(QWidget *parent) : QDialog(parent), ui(new Ui::Dialogin) { ui->setupUi(this); i=0; capture = NULL; capture = cvCaptureFromCAM(0); cvSetCaptureProperty(capture, CV_CAP_PROP_FRAME_WIDTH, 640); cvSetCaptureProperty(capture, CV_CAP_PROP_FRAME_HEIGHT, 480); setWindowFlags(windowFlags()&~ Qt::WindowCloseButtonHint); //gimage =NULL; // connect(this, SIGNAL(getimage(const QImage &image)), this, SLOT(showimage(const QImage &image))); timer = new QTimer(this); timer->setInterval(50); connect(timer, SIGNAL(timeout()), this, SLOT(showimage())); timer->start(); } Dialogin::~Dialogin() { delete ui; } void Dialogin::Sleep(int msec) { QTime dieTime = QTime::currentTime().addMSecs(msec); while( QTime::currentTime() < dieTime ) QCoreApplication::processEvents(QEventLoop::AllEvents, 100); } void Dialogin::on_pushButton_photo_clicked() { // qDebug() << ui->pushButton_photo->text() << endl; if(ui->lineEdit_name->text() == NULL) { QMessageBox::warning(this,tr("错误"),tr("请输入姓名"),QMessageBox::Ok); } else { if(capture == NULL) { QMessageBox::warning(this, tr("警告!!!"), tr("摄像头打不开!!!!"), QMessageBox::Abort); return; } QDir *path = new QDir; bool exist = path->exists(QDir::currentPath() "/TEMP"); if(!exist) { bool ok = path->mkdir(QDir::currentPath() "/TEMP"); if(ok) { QMessageBox::warning(this,tr("创建文件夹"),tr("文件夹创建成功!")); } } QString temp = QDir::currentPath() "/TEMP/%d.jpg"; char * path_src; QByteArray ba= temp.toLatin1(); path_src = ba.data(); frame = cvQueryFrame( capture ); std::string filename = cv::format(path_src, i); ui->pushButton_photo->setText(QString::number(i 1,10)); imwrite(filename, frame); i ; } } void Dialogin::on_pushButton_start_photo_clicked() { QMessageBox *startbox = new QMessageBox(QMessageBox::Warning ,"信息","开始取样请稍后!!!",QMessageBox::NoButton,this); startbox->show(); Sleep(1000); QFile user(QDir::currentPath() "/usr.txt"); if(!user.open(QIODevice::ReadWrite | QIODevice::Text)) { startbox->close(); qDebug() << user.errorString() <<endl; } qint64 usrlinenum =0; usrlinenum=1; while(!user.atEnd()) { char buf[128]; qint64 c = user.readLine(buf, sizeof(buf)); if(c > 0) { usrlinenum ; qDebug() << buf <<endl; } if(c <0 ) { startbox->close(); QMessageBox::warning(this,tr("文件读取"),tr("文件读取失败!!!")); return; } } // qDebug() << QString::number(i, 10) <<endl; QString usrline = QString::number(usrlinenum, 10) ";" ui->lineEdit_name->text() "\r\n"; qDebug() << usrline <<endl; char * p; QByteArray buf = usrline.toLatin1(); p = buf.data(); user.write(p); user.close(); QDir *pathdata = new QDir; bool exist = pathdata->exists(QDir::currentPath() "/" QString::number(usrlinenum, 10) ); if(!exist) { bool ok = pathdata->mkdir(QDir::currentPath() "/" QString::number(usrlinenum, 10)); if(!ok) { QMessageBox::warning(this,tr("创建文件夹失败"),tr("文件夹创建失败!")); startbox->close(); return; } } QString pathdst = QDir::currentPath() "/" QString::number(usrlinenum, 10) "/"; /*********************************************************************************************/ cv::CascadeClassifier face_Classifier; //定义人脸分类器 std::string face_Classifier_name = "./haarcascade_frontalface_alt.xml"; std::vector<cv::Rect> face_rect; cv::Mat dst_gray; if (!face_Classifier.load(face_Classifier_name)) { startbox->close(); QMessageBox::warning(this,tr("错误"),tr("haarcascade_frontalface_alt.xml加载失败"),QMessageBox::Ok); return; } QString dst_path = pathdst "%d.jpg"; QDir dir(QDir::currentPath() "/TEMP/"); QStringList dst_file_name; dst_file_name << "*.jpg" ; QFileInfoList list = dir.entryInfoList(dst_file_name, QDir::Files|QDir::Readable, QDir::Name); qDebug() << list.size() << endl; char * path_dst; QByteArray dsttemp= dst_path.toLatin1(); path_dst = dsttemp.data(); for(int z=0;z< list.size();z ) { char * path_list_src ; QByteArray dsttemp= list[z].absoluteFilePath().toLatin1(); path_list_src = dsttemp.data(); std::string srcfile = cv::format(path_list_src); std::string dstfile = cv::format( path_dst, z); cv::Mat srcframe = cv::imread(srcfile); cv::cvtColor(srcframe, dst_gray, cv::COLOR_BGR2GRAY); cv::equalizeHist(dst_gray, dst_gray); face_Classifier.detectMultiScale(dst_gray, face_rect, 1.1, 3, CV_HAAR_DO_ROUGH_SEARCH, cv::Size(30, 30)); for (int j = 0; j < (int)face_rect.size(); j ) { cv::Mat faceROI = srcframe(face_rect[j]); cv::Mat MyFace; cv::Mat gray_MyFace; if (faceROI.cols > 100) { cv::resize(faceROI, MyFace, cv::Size(92, 112)); cv::cvtColor(MyFace, gray_MyFace, CV_BGR2GRAY); imwrite(dstfile, gray_MyFace); } } } /***********************************************************************************************************/ QFile csv(QDir::currentPath() "/csv.txt"); if(!csv.open(QIODevice::WriteOnly | QIODevice::Append | QIODevice::Text)) { qDebug() << csv.errorString() << endl; startbox->close(); QMessageBox::warning(this,tr("错误"),tr("无法创建csv文件!!!"),QMessageBox::Ok); return; } QDir dst_file_dir(pathdst); QStringList dst_file_filter; dst_file_filter << "*.jpg" ; QFileInfoList dst_file_list_path = dst_file_dir.entryInfoList(dst_file_filter, QDir::Files | QDir::Readable, QDir::Name); for(int x=0; x<dst_file_list_path.size(); x ) { csv.write(QString(dst_file_list_path[x].absoluteFilePath() ";" QString::number(usrlinenum, 10) "\r\n").toLatin1()); } startbox->close(); QMessageBox::warning(this,tr("信息"),tr("取样已经完成、csv文件完创建成!!!"),QMessageBox::Ok); } void Dialogin::on_pushButton_close_clicked() { ui->lineEdit_name->setEnabled(true); ui->pushButton_start_photo->setEnabled(true); ui->lineEdit_name->clear(); if(capture != NULL) { cvReleaseCapture(&capture); } this->close(); } void Dialogin::showimage() { if(capture != NULL) { cv::Mat src ; src = cvQueryFrame( capture ); //格式转换否则无法正常显示图片 cvtColor( src, src, CV_BGR2RGB ); QImage img=QImage((const unsigned char*)(src.data), src.cols, src.rows, QImage::Format_RGB888); QPixmap pix = QPixmap::fromImage(img); ui->label_video->setPixmap(pix); } }
标签:
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明
网友评论
我要评论