首页 > 其他分享 >GOQTTemplate简单介绍

GOQTTemplate简单介绍

时间:2022-12-25 13:03:39浏览次数:37  
标签:src img 介绍 label ui 简单 MainWindow 摄像头 GOQTTemplate

集合OpenCV的视频功能和QCamera的摄像头接口,开发出易于理解的、结构简单的摄像头控制和采集框架。


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;
//是否使用算法


//填充界面控件


const QList
<QCameraInfo
> availableCameras
= QCameraInfo
:
:availableCameras();


for (
const QCameraInfo
&cameraInfo
: availableCameras)

{

ui
-
>comboCamera
-
>addItem(cameraInfo.description());

}

ui
-
>comboCamera
-
>setCurrentIndex(
0);

bCameraOpen
=
false;



//显示的图像自动缩放




ui->label->setScaledContents(true);




ui->label_2->setScaledContents(true);



在界面初始化的时候,就直接填充界面。注意这里 setScaledContents的设置使得图像能够填充满整个窗体。



 



另一个非常关键的一句就是



connect(timer, SIGNAL(timeout()), 
this, SLOT(readFarme()));
// 时间到,读取当前摄像头信息

 



相当于ontimer,非常直观吧。

// 从摄像头中抓取并返回每一帧

void MainWindow
:
:readFarme()

{

videocapture
-
>read(matFrame);


//是否图像处理

Mat tmp;



if(bMethod)
//这里只是简单地实现一个Canny算法

{

cvtColor(matFrame,tmp,COLOR_BGR2GRAY);

cv
:
:Canny(tmp,tmp,
100,
255,
3);

cvtColor(tmp,matDst,COLOR_GRAY2BGR);

}


else

{

matDst
= matFrame.clone();

}


// 格式转换

QPixmap qpixmap
= Mat2QImage(matDst);


// 将图片显示到label上

ui
-
>label
-
>setPixmap(qpixmap);

}

这里使用了 Mat2QImage函数,将图像转换为 qpixmap,并且显示在 label上



//打开磁盘上的图片

void MainWindow
:
:on_pushButton_clicked()

{


//第3个参数表示查找文件时从哪个目录开始,如果为"."的话,表示从该工程目录开始查找,最后那个参数的过滤器的名字之间


//要用空格,否则识别不出来

QString img_name
= QFileDialog
:
:getOpenFileName(
this, tr(
"Open Image"),
".",tr(
"Image Files(*.png *.jpg *.jpeg *.bmp)"));


if(img_name
==
"")


return;


//toAscii()返回8位描述的string,为QByteArray,data()表示返回QByteArray的指针,QByteArray为字节指针


//现在已改为toLatinl函数

Mat src
= imread(img_name.toLatin1().data());

cvtColor( src, src, CV_BGR2RGB );

QImage img
= QImage( (
const
unsigned
char
*)(src.data), src.cols, src.rows, QImage
:
:Format_RGB888 );

ui
-
>label
-
>setPixmap( QPixmap
:
:fromImage(img) );

img_name.clear();

}



可以直接使用函数,打开磁盘上的图片。


//打开摄像头

void MainWindow
:
:on_pushButton_OpenCam_clicked()

{


int i
= ui
-
>comboCamera
-
>currentIndex();


//打开摄像头,从摄像头中获取视频


if(bCameraOpen)

{

videocapture
-
>release();
//kill camera first

}

videocapture
=
new VideoCapture(i);

bCameraOpen
=
true;


//这里给出了一个非常大的分辨率,如果摄像头没有这么大的分辨率,则会默认打开其支持的最大分辨率

videocapture
-
>set(CV_CAP_PROP_FRAME_WIDTH,
2592);

videocapture
-
>set(CV_CAP_PROP_FRAME_HEIGHT,
1944);


// 开始计时,超时则发出timeout()信号

timer
-
>start(
0);

}



摄像头的打开也非常直接。




GOQTTemplate简单介绍_初始化


 


 


添加了一些修改,使用QT来做,真的是非常方便:

GOQTTemplate简单介绍_初始化_02

 

项目地址:

​​ https://github.com/jsxyhelu/GOQTTemplate3​​

欢迎提出宝贵意见。


标签:src,img,介绍,label,ui,简单,MainWindow,摄像头,GOQTTemplate
From: https://blog.51cto.com/jsxyhelu2017/5968100

相关文章