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

优采云 发布时间: 2021-09-04 19:14

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

)

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

  网上搜集了很多资料。 QT没有专门的camera类,所以这个就得自己写了。网上也有很多关于海关openCV和V4l的介绍,因为我的项目是在window下开发的,所以选择了openCV。因为之前没用过openCV,所以只看了openCVS*敏*感*词*的操作部分,其他的没时间看。功能

  openCV:学习

  第一次下载是2.3.1。安装后发现没有lib库,所以选择2.1的ui

  openCV中文学习pdf:这个

  现在,我开始详细介绍如何在QT中实时采集camera数据。温泉

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

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

  

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

  

  编辑camaraget.h文件orm

  #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

  好的,你完成了。运行后,在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人工客服


线