Qt--windows平台上如何获取qml中Camera的数据

分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow

                       

曾经写了一个博客:
我们为什么不习惯使用qml? 最后有一个悬念,到底如何在C++代码中获取qml中camera的数据呢?

QAbstractVideoFilter
The QAbstractVideoFilter class represents a filter that is applied to the video frames received by a VideoOutput type.
https://doc-snapshots.qt.io/qt5-dev/qabstractvideofilter.html#details

QVideoFilterRunnable
The QVideoFilterRunnable class represents the implementation of a filter that owns all graphics and computational resources, and performs the actual filtering or calculations.

上面两个类自己去看官方文档吧,翻译不好。

开始撸代码!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

写一个自己的类叫CameraFilter吧:

camerafilter.h

#ifndef CAMERAFILTER#define CAMERAFILTER#include <QVideoFilterRunnable>class CameraFilter : public QAbstractVideoFilter{    Q_OBJECTpublic:    CameraFilter();    ~CameraFilter();    QVideoFilterRunnable *createFilterRunnable();private:signals:    void finished(QObject *result);    void cameraFrameSignal(QVideoFrame);public slots:};class CameraFilterRunnable : public QVideoFilterRunnable{public:    CameraFilterRunnable(CameraFilter* filter = NULL);    ~CameraFilterRunnable();    QVideoFrame run(QVideoFrame *input, const QVideoSurfaceFormat &surfaceFormat, RunFlags flags);private:    CameraFilter *m_filter;};#endif // CAMERAFILTER
  
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33

camerafilter.cc

#include "camerafilter.h"#include "qdebug.h"CameraFilter::CameraFilter(){}CameraFilter::~CameraFilter(){}QVideoFilterRunnable *CameraFilter::createFilterRunnable(){    return new CameraFilterRunnable(this);}CameraFilterRunnable::CameraFilterRunnable(CameraFilter* filter){    m_filter = filter;}CameraFilterRunnable::~CameraFilterRunnable(){}QVideoFrame CameraFilterRunnable::run(QVideoFrame *input, const QVideoSurfaceFormat &surfaceFormat, RunFlags flags){    QVideoFrame cloneFrame(*input);    emit m_filter->cameraFrameSignal(cloneFrame);    return cloneFrame;}
  
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37

不要骂娘,上面的代码很简单的,其实官方的文档中也有类似的代码片段,不懂的自己看奥。
是通过:

emit m_filter->cameraFrameSignal(cloneFrame);
  
  
  • 1

我们自己写一个slot,然后对Frame进行相应的处理!

接下来才是高潮!!!!

第一步、让qml中理解我们自己的类CameraFilter(Defining QML Types from C++) :

在C++中注册:

qmlRegisterType<CameraFilter>("CameraFilter", 1, 0, "CameraFilter");
  
  
  • 1

在qml中导入:

import CameraFilter 1.0
  
  
  • 1

第二步、在qml中干点大事儿:

          Camera {                objectName: "CameraObject"                id: camera                imageProcessing.whiteBalanceMode: CameraImageProcessing.WhiteBalanceFlash                exposure {                    exposureCompensation: -1.0                    exposureMode: Camera.ExposurePortrait                }                captureMode: Camera.CaptureVideo                flash.mode: Camera.FlashRedEyeReduction            }            VideoOutput {                width: 160                height: 90                id: video_output                objectName: "VidelOutputObject"                source: camera                anchors.fill: parent                focus : visible // to receive focus and capture key events when visible                visible: false                filters: [filter]                fillMode: VideoOutput.PreserveAspectFit            }            CameraFilter {                objectName: "cameraFilterObject"                id: filter            }
  
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
           

分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值