#
include "mainwindow.h" #
include "ui_mainwindow.h" using namespace cv;
//全局变量 Mat src;
Mat gray;
Mat tmp;
Mat dst;
MainWindow
: :MainWindow(QWidget
*parent)
:QMainWindow(parent),ui(
new Ui
: :MainWindow)
{
ui
- >setupUi(
this);
timer
= new QTimer(
this);
imag
= new QImage();
// 初始化 connect(timer, SIGNAL(timeout()),
this, SLOT(readFarme()));
// 时间到,读取当前摄像头信息 bMethod
= false;
//是否使用算法 }
MainWindow
: : ~MainWindow()
{
delete ui;
}
//事件驱动 //打开摄像头 void MainWindow
: :on_pushButton_clicked()
{
//打开摄像头,从摄像头中获取视频 videocapture
= new VideoCapture(
0);
// 开始计时,超时则发出timeout()信号 timer
- >start(
33);
}
//读取下一Frame图像 void MainWindow
: :readFarme()
{
// 从摄像头中抓取并返回每一帧 videocapture
- >read(matFrame);
//图像处理 if(bMethod)
{
cvtColor(matFrame,tmp,COLOR_BGR2GRAY);
Canny(tmp,dst,
30,
255);
}
else {
dst
= matFrame.clone();
}
// 格式转换 QPixmap qpixmap
= Mat2QImage(dst);
// 将图片显示到label上 ui
- >label
- >setPixmap(qpixmap);
}
//拍照 void MainWindow
: :on_pushButton_2_clicked()
{
// 格式转换 QPixmap qpixmap
= Mat2QImage(dst);
// 将图片显示到label上 ui
- >label_2
- >setPixmap(qpixmap);
}
//执行算法 void MainWindow
: :on_pushButton_4_clicked()
{
bMethod
= !bMethod;
}
//关闭摄像头 void MainWindow
: :on_pushButton_3_clicked()
{
timer
- >stop();
// 停止读取数据。 videocapture
- >release();
}
//helper函数// //格式转换 QPixmap Mat2QImage(Mat src)
{
QImage img;
//根据QT的显示方法进行转换 if(src.channels()
== 3)
{
cvtColor( src, tmp, CV_BGR2RGB );
img
= QImage( (
const unsigned char *)(tmp.data), tmp.cols, tmp.rows, QImage
: :Format_RGB888 );
}
else {
img
= QImage( (
const unsigned char *)(src.data), src.cols, src.rows, QImage
: :Format_Grayscale8 );
}
QPixmap qimg
= QPixmap
: :fromImage(img) ;
return qimg;
}