文章采集调用(QT+openCV操做的这部分,其余还没时间看 )

优采云 发布时间: 2022-01-24 11:16

  文章采集调用(QT+openCV操做的这部分,其余还没时间看

)

  今天写的QT+openCV实现了拍照拍照功能。应用

  我在互联网上采集了很多信息。 QT 没有用于操作相机的特殊类。这个必须自己写。网上也有很多关于openCV和V4l的介绍。因为我的项目要在window下开发,所以选择了openCV。因为之前没用过openCV,所以只看了openCVS*敏*感*词*的操作这部分,剩下的没来得及看。功能

  openCV:学习

  第一次下载来自 2.3.1。安装后发现没有lib库,所以选择了2.1

  的ui

  openCV中文学习pdf:这个

  现在,我们开始详细介绍如何在QT中直播采集相机数据。温泉

  打开QTcreator(我用的是QT中文版2.3).net

  创建一个新的小部件项目指针

  

  在界面上放两个标签,显示相机拍摄的数据和照片采集。或者

  

  编辑camaraget.h文件视频

  #ifndef CAMARAGET_H

#define CAMARAGET_H

#include

#include

#include // 设置采集数据的间隔时间

#include //包含opencv库头文件

#include

namespace Ui {

class camaraGet;

}

class camaraGet : public QWidget

{

Q_OBJECT

public:

explicit camaraGet(QWidget *parent = 0);

~camaraGet();

private slots:

void openCamara(); // 打开*敏*感*词*

void readFarme(); // 读取当前帧信息

void closeCamara(); // 关闭*敏*感*词*。

void takingPictures(); // 拍照

private:

Ui::camaraGet *ui;

QTimer *timer;

QImage *imag;

CvCapture *cam;// 视频获取结构, 用来做为视频获取函数的一个参数

IplImage *frame;//申请IplImage类型指针,就是申请内存空间来存放每一帧图像

};

#endif // CAMARAGET_H

  编辑 camaraget.cpp

  #include "camaraget.h"

#include "ui_camaraget.h"

camaraGet::camaraGet(QWidget *parent) :

QWidget(parent),

ui(new Ui::camaraGet)

{

ui->setupUi(this);

cam = NULL;

timer = new QTimer(this);

imag = new QImage(); // 初始化

/*信号和槽*/

connect(timer, SIGNAL(timeout()), this, SLOT(readFarme())); // 时间到,读取当前*敏*感*词*信息

connect(ui->open, SIGNAL(clicked()), this, SLOT(openCamara()));

connect(ui->pic, SIGNAL(clicked()), this, SLOT(takingPictures()));

connect(ui->closeCam, SIGNAL(clicked()), this, SLOT(closeCamara()));

}

/******************************

********* 打开*敏*感*词* ***********

*******************************/

void camaraGet::openCamara()

{

cam = cvCreateCameraCapture(0);//打开*敏*感*词*,从*敏*感*词*中获取视频

timer->start(33); // 开始计时,超时则发出timeout()信号

}

/*********************************

********* 读取*敏*感*词*信息 ***********

**********************************/

void camaraGet::readFarme()

{

frame = cvQueryFrame(cam);// 从*敏*感*词*中抓取并返回每一帧

// 将抓取到的帧,转换为QImage格式。QImage::Format_RGB888不一样的*敏*感*词*用不一样的格式。

QImage image((const uchar*)frame->imageData, frame->width, frame->height, QImage::Format_RGB888);

ui->label->setPixmap(QPixmap::fromImage(image)); // 将图片显示到label上

}

/*************************

********* 拍照 ***********

**************************/

void camaraGet::takingPictures()

{

frame = cvQueryFrame(cam);// 从*敏*感*词*中抓取并返回每一帧

// 将抓取到的帧,转换为QImage格式。QImage::Format_RGB888不一样的*敏*感*词*用不一样的格式。

QImage image((const uchar*)frame->imageData, frame->width, frame->height, QImage::Format_RGB888);

ui->label_2->setPixmap(QPixmap::fromImage(image)); // 将图片显示到label上

}

/*******************************

***关闭*敏*感*词*,释放资源,必须释放***

********************************/

void camaraGet::closeCamara()

{

timer->stop(); // 中止读取数据。

cvReleaseCapture(&cam);//释放内存;

}

camaraGet::~camaraGet()

{

delete ui;

}

  好了,所有代码都OK了(当然项目建好的时候会生成main.cpp,不用改),但是现在点击运行,还是会报错,为什么由于尚未收录 openCV 库。

  在 *.pro 文件中添加:

  INCLUDEPATH+=C:\OpenCV2.1\include\opencv

   LIBS += C:\OpenCV2.1\lib\highgui210.lib \

   C:\OpenCV2.1\lib\cxcore210.lib \

   C:\OpenCV2.1\lib\cv210.lib

  OK,大功告成,运行后,在widget中点击打开*敏*感*词*,就可以看到自己了。运行后的效果:

  

  后来发现这个效果不是很好,于是改了:改后的运行效果也贴出来:

  我改了一句:

  QImage image((const uchar*)frame->imageData, frame->width, frame->height, QImage::Format_RGB888);

  改成了 QImage image = QImage((const uchar*)frame->imageData, frame->width, frame->height, QImage::Format_RGB888).rgbSwapped();

  

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线