如何检索 QML 相机提要并发送到 C++ 后端

Posted

技术标签:

【中文标题】如何检索 QML 相机提要并发送到 C++ 后端【英文标题】:How to retrieve QML camera feed and send to C++ backend 【发布时间】:2015-07-15 09:44:32 【问题描述】:

我正在尝试如何从 QML 相机实现进一步处理的不同实现,我需要将提要传递给 C++ 端,以便可以将其转换为 cv::Mat 图像并传递给函数进行处理.我尝试从 C++ 端设置 QCamera 并在单击按钮时启动它,但似乎 Qt 无法创建同一相机的两个实例。我也尝试过开放式简历方法,但无济于事。最好的方法是什么?

【问题讨论】:

捕获图像并对其进行处理不是一种选择吗?保存图像后,它可以与imread 一起使用以生成Mat 对象进行处理。 我需要在后端连续运行提要。如果我能得到一个实现,其中可以从 QML 端的提要中连续生成 QImage 并将其发送回我的 opencv 函数,我已经解决了这个问题。 您可以通过在捕获图像后立即发出捕获来连续捕获。处理完之前的图像后立即捕获新图像不是更好吗?抱歉提问,我想完全理解您的需求。 Camera id: cam imageProcessing.whiteBalanceMode: CameraImageProcessing.WhiteBalanceFlash captureMode: Camera.CaptureStillImage objectName: "Camera" imageCapture onImageCaptured: camfeed.source = preview wrapper.processImage(preview) 这是到目前为止我在相机上的实现,我明白你在说什么,所以在图像更改后(onImageCaptureChanged)?向 C++ 发出信号? 当处理终止时,您从 c++ 发出一个信号并在 QML 中处理它。在处理程序中,您调用新的捕获并关闭了圆圈。这样可以吗? 【参考方案1】:

这不是修复,而是解决方法。我为相机使用了一个 OpenCv 插件,并使用 qmlRegisterType 使其对我的 QML 可见。然后我可以轻松地将帧从后端发送到我的其他类进行处理。对于任何想要这样做的人,我使用了这个插件:https://github.com/rferrazz/CvCamView

【讨论】:

哦,你解决了这个问题。好的。我正在审查我提供的代码。好吧,我很高兴你找到了一个可行的解决方案。 :) 感谢您的帮助。我确实认为有一个直接从 QML 相机中直接抓取帧的示例当然是值得的。虽然将 CVcamera 直接作为 QML 上的一个元素是一个很好的解决方法,但它消除了美学上令人愉悦的因素QML 有..【参考方案2】:

Qt QML Camera to C++ QImage on android

我刚刚回答了这个问题,我想你也有同样的问题。

这里的基本思想是获取QML相机的实例,访问它的QMediaObject点并用QVideoProbe探测它。还有其他解决方案,但 AFAIK 它们在 Android 平台上并不容易或快速,但如果不是你的情况,你可能应该尝试 QAbstractVideoFilter 和 QVideoFilterRunnable 类,它们是专门为后处理 qml 视频提要开发的。

请注意,QAbstractVideoFilter 和 QVideoFilterRunnable 仅是 Qt 5.5 类。

【讨论】:

以上是关于如何检索 QML 相机提要并发送到 C++ 后端的主要内容,如果未能解决你的问题,请参考以下文章

如何有条件地禁用 QML 绑定到 C++ 后端?

如何在 QML QVideoFilterRunnable 中访问相机?

Flex Datagrid 选择多行并发送到 amfphp 后端

如何在 QML Canvas 对象中检索 QPainter 对象

QML 相机尺寸问题

如何将 QPixmap 从 C++ 模型传递到 QML?