实例介绍
【实例截图】
【核心代码】
#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小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明


网友评论
我要评论