Windows Qt以及如何在没有OpenCV的情况下捕获网络摄像头
发布时间:2020-12-14 01:49:01 所属栏目:Windows 来源:网络整理
导读:我很长时间都在为这个问题而战. 我无法让OpenCV工作,我已经关注了很多关于它的教程以及如何在Qt中使用,所以我累了,我想避免使用OpenCV. 现在,我的要求或问题……我需要在一个只有一个按钮的Qt GUI应用程序中显示网络摄像头提要(实时视频,没有音频):“拍摄快
我很长时间都在为这个问题而战.
我无法让OpenCV工作,我已经关注了很多关于它的教程以及如何在Qt中使用,所以我累了,我想避免使用OpenCV. 现在,我的要求或问题……我需要在一个只有一个按钮的Qt GUI应用程序中显示网络摄像头提要(实时视频,没有音频):“拍摄快照”,显然,从当前提要中拍摄照片,存储它. 就这样. 无论如何在没有使用OpenCV的情况下完成这项工作? 系统规格: > Qt 4.8 希望有人可以帮助我,因为我疯了. 提前致谢!
好的,我终于做到了,所以我会在这里发布我的解决方案,以便我们对此有一些明确的看法.
我使用了一个名为“ESCAPI”的库:http://sol.gfxile.net/escapi/index.html 这提供了一种从设备捕获帧的极其简单的方法.使用这些原始数据,我只需创建一个QImage,稍后将在QLabel中显示. 我创建了一个简单的对象来处理它. #include <QDebug> #include "camera.h" Camera::Camera(int width,int height,QObject *parent) : QObject(parent),width_(width),height_(height) { capture_.mWidth = width; capture_.mHeight = height; capture_.mTargetBuf = new int[width * height]; int devices = setupESCAPI(); if (devices == 0) { qDebug() << "[Camera] ESCAPI initialization failure or no devices found"; } } Camera::~Camera() { deinitCapture(0); } int Camera::initialize() { if (initCapture(0,&capture_) == 0) { qDebug() << "[Camera] Capture failed - device may already be in use"; return -2; } return 0; } void Camera::deinitialize() { deinitCapture(0); } int Camera::capture() { doCapture(0); while(isCaptureDone(0) == 0); image_ = QImage(width_,height_,QImage::Format_ARGB32); for(int y(0); y < height_; ++y) { for(int x(0); x < width_; ++x) { int index(y * width_ + x); image_.setPixel(x,y,capture_.mTargetBuf[index]); } } return 1; } 和头文件: #ifndef CAMERA_H #define CAMERA_H #include <QObject> #include <QImage> #include "escapi.h" class Camera : public QObject { Q_OBJECT public: explicit Camera(int width,QObject *parent = 0); ~Camera(); int initialize(); void deinitialize(); int capture(); const QImage& getImage() const { return image_; } const int* getImageRaw() const { return capture_.mTargetBuf; } private: int width_; int height_; struct SimpleCapParams capture_; QImage image_; }; #endif // CAMERA_H 这很简单,但仅仅是出于示例目的. Camera cam(320,240); cam.initialize(); cam.capture(); QImage img(cam.getImage()); ui->label->setPixmap(QPixmap::fromImage(img)); 当然,您可以使用QTimer并在QLabel中更新框架,您将在那里看到视频…… 希望它有所帮助!并感谢尼古拉斯的帮助! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- castle-windsor – 在哪里可以找到Castle.MicroKernel.dll
- .net – 如何在Windows上为任务栏创建工具栏?
- Windows 7 x64上的Delphi问题?
- C语言 system函数
- 验证 – Microsoft Code Contracts是否不适合验证用户输入?
- windows-server-2008-r2 – 配置客户端在内部使用WSUS,在外
- Windows – Amazon EC2容量和工作流程问题
- windows-server-2003 – 在Windows更新后阻止服务器重新启动
- Windows7中Python 3.4中的curses需要什么?
- windows-server-2003 – 安全组与通讯组