如何检索 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 QVideoFilterRunnable 中访问相机?
Flex Datagrid 选择多行并发送到 amfphp 后端