#include "widget.h"
#include "ui_widget.h"
#include <QTimer>
#include <QMessageBox>
static CvMemStorage* storage = 0;
static CvHaarClassifierCascade* cascade = 0;
const char* cascade_name = "haarcascade_frontalface_alt2.xml";
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
}
Widget::~Widget()
{
delete ui;
}
void Widget::changeEvent(QEvent *e)
{
QWidget::changeEvent(e);
switch (e->type()) {
case QEvent::LanguageChange:
ui->retranslateUi(this);
break;
default:
break;
}
}
void Widget::flush(void)
{
Video->FetchPicture();
frame = new QImage(Video->Addr,320,240,QImage::Format_RGB16);
frame->loadFromData((unsigned char*)Video->Addr,320*240*2*sizeof(char));
ui->label->setPixmap(QPixmap::fromImage(*frame,Qt::AutoColor));
}
void Widget::do_capture()
{
int video_rd = -1;
unsigned long dataSize = 0;
unsigned short rgb565Data[WIDTH*HEIGHT];
unsigned char rgb24Data[WIDTH*HEIGHT*2];
if(Video->fd>0)
{
dataSize = WIDTH*HEIGHT ;
video_rd = read(Video->fd,rgb565Data,dataSize*2);
if(video_rd<0)
QMessageBox::warning(this,tr("Read Waining"),tr("Read Error"));
fflush(stdout);
Video->rgb565Torgb24(rgb565Data,WIDTH,HEIGHT,rgb24Data);
Video->setBmpHeader(rgb24Data,WIDTH,HEIGHT,"EIB.bmp");
fflush(stdout);
}
}
void Widget::do_Process()
{
cascade = (CvHaarClassifierCascade*)cvLoad( cascade_name, 0, 0, 0 );
storage = cvCreateMemStorage(0);
IplImage *img = cvLoadImage("EIB.bmp",1);
if (img)
{
detect_and_draw( img );
//cvWaitKey(0);
//cvReleaseImage( &img );
}
}
void Widget::on_pushButton_clicked()
{
timer=new QTimer(this);
connect(timer,SIGNAL(timeout()),this,SLOT(flush()));
timer->start(30);
Video = new TVideo("/dev/camera");
frame = new QImage(Video->Addr,320,240,QImage::Format_RGB16);
//FrameBuffer = new TFrameBuffer;
}
void Widget::on_capButton_clicked()
{
do_capture();
}
void Widget::on_exitButton_clicked()
{
Video->closefd();
free(Video->Addr);
ui->label->clear();
timer->stop();
}
void Widget::on_pushPROCESSButton_clicked()
{
do_Process();
}
void Widget::detect_and_draw( IplImage* img )
{
static CvScalar colors[] =
{
{{0,0,255}},
{{0,128,255}},
{{0,255,255}},
{{0,255,0}},
{{255,128,0}},
{{255,255,0}},
{{0,255,0}},
{{255,0,255}}
};
double scale = 2;
//建立一个空的灰度图
IplImage* gray = cvCreateImage( cvSize(img->width,img->height), 8, 1 );
//建立一个空圆形的灰度图
IplImage* small_img = cvCreateImage( cvSize( cvRound (img->width/scale),
cvRound (img->height/scale)),
8, 1 );
int i;
//图像转换RGB模式转为灰度图
cvCvtColor( img, gray, CV_BGR2GRAY );
cvResize( gray, small_img, CV_INTER_LINEAR );
cvEqualizeHist( small_img, small_img );
cvClearMemStorage( storage );
if( cascade )
{
double t = (double)cvGetTickCount();
CvSeq* faces = cvHaarDetectObjects( small_img, cascade, storage,
1.1, 2, 0/*CV_HAAR_DO_CANNY_PRUNING*/,
cvSize(30, 30) );
t = (double)cvGetTickCount() - t;
printf( "detection time = %gms/n", t/((double)cvGetTickFrequency()*1000.) );
for( i = 0; i < (faces ? faces->total : 0); i++ )
{
CvRect* r = (CvRect*)cvGetSeqElem( faces, i );
CvPoint center;
int radius;
center.x = cvRound((r->x + r->width*0.5)*scale);
center.y = cvRound((r->y + r->height*0.5)*scale);
radius = cvRound((r->width + r->height)*0.25*scale);
//cvCircle( img, center, radius, colors[i%8], 3, 8, 0 );
cvRectangle(img,cvPoint(center.x-radius,center.y-radius),cvPoint(center.x+radius,center.y+radius),colors[i%8],3,8,0);
//cvRect(center.x-radius,center.y-radius,center.x+radius,center.y+radius);
}
}
cvCvtColor(img,img,CV_BGR2RGB);
unsigned char *imgData=(unsigned char *)img->imageData;
QImage image(imgData,img->width,img->height,QImage::Format_RGB888);
ui->label_2->setPixmap(QPixmap::fromImage(image));
ui->label_2->show();
//cvShowImage( "result", img );
cvReleaseImage( &gray );
cvReleaseImage( &small_img );
}
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
EIBCam.rar (22个子文件)
EIBCam--第一次人脸识别,有木有
moc_widget.cpp 3KB
EIBCam 37KB
TRect.o 3KB
haarcascade_frontalface_alt2.xml 818KB
EIBCam.pro 490B
widget.h 725B
widget.ui 2KB
ProcessBmp.h 1KB
TFrameBuffer.o 3KB
Cam.cpp 4KB
ui_widget.h 3KB
main.cpp 195B
moc_widget.o 7KB
EIBCam.pro.user 20KB
ProcessBmp.cpp 901B
widget.o 15KB
Makefile 8KB
main.o 2KB
Cam.h 1KB
ProcessBmp.o 2KB
Cam.o 4KB
widget.cpp 5KB
共 22 条
- 1
Vinsmoke
- 粉丝: 11
- 资源: 13
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
前往页