一、实验目的
通过实验掌握使用Qt读取图片,画图,调用摄像头等功能,了解opencv库的一些功能及使用,进一步熟悉用Qt进行开发的步骤,从而更好的学习这门课程。
二、实验内容
用Qt实现一个窗口界面,功能包括:
(1)读图片:可以读取指定路径图片并在窗口显示,图片轮播功能,也可以直接拖入图片;
(2)画图:可以通过拖到鼠标实现画圆或者矩形;
(3)相机:可以调用摄像头进行实时拍照,停止时关闭摄像头;
(4)找边缘:可以对指定路径的图片实现水平方向、垂直方向和整体的找边缘;
(5)找人脸:可以对指定路径的图片进行简单人脸识别,并用矩形画出检测出人脸的位置。
三、功能函数
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
initUi();
img=QImage(ui->label->width(),ui->label->height(),QImage::Format_ARGB32);
mt=new QTimer();
connect(mt,SIGNAL(timeout()),this,SLOT(timerdo()));
mt1=new QTimer();
connect(mt1,SIGNAL(timeout()),this,SLOT(timer1do()));
mt1=new QTimer();
connect(mt1,SIGNAL(timeout()),this,SLOT(timer1do()));
imglist.clear();
imglist<<"C:/Users/Public/Pictures/Sample Pictures/Koala.jpg"
<<"C:/Users/Public/Pictures/Sample Pictures/Penguins.jpg"
<<"C:/Users/Public/Pictures/Sample Pictures/Tulips.jpg"
<<"C:/Users/Public/Pictures/Sample Pictures/Desert.jpg";
pos=0; dx=dy=0; wid=200; hei=100;
ui->label->setFocus();
sp=ep=QPoint(0,0);
this->installEventFilter(this);
this->setAcceptDrops(true);
initCam();
}
Widget::~Widget()
{
delete ui;
}
void Widget::initUi()
{
QVBoxLayout *vlay=new QVBoxLayout();
vlay->addWidget(ui->btn_read);
vlay->addWidget(ui->btn_draw);
vlay->addWidget(ui->comboBox);
vlay->addWidget(ui->btn_anim);
vlay->addWidget(ui->btn_openCam);
vlay->addWidget(ui->btn_stop);
vlay->addWidget(ui->btn_cvTest);
vlay->addWidge