qt打开android相机,Qt QML相机到C QImage在Android上
1)是的,这是可能的.我有两种方法来做到这一点.
使用QAbstractVideoFilter与QVideoFilterRunnable类(仅限QT 5.5),这是很好的.它们是专门针对这种情况开发的,并且非常易于使用.
网络上有几个很好的例子使用它:
这种方法的缺点就是说here就是说,在Android设备上,QVideoFrame指针没有原始的像素数据,而是具有需要读回的OpenGL纹理(我发布的第二个例子解决了这个),从而使这种方法对于IMHO实时目的不是很好.
我最终用来解决这个问题的是QVideoProbe课.
首先你必须命名你的QML相机的实例:
Camera {
id: camera
objectName: "qrCameraQML"
}
那么你从C方获得这个实例,就像:
QObject *qmlCamera = engine.rootObjects().at(0).findChild("qrCameraQML");
QML相机实例实际上具有一个QVariant元素,只能通过C进行访问,可以将其转换为QCamera *:
camera_ = qvariant_cast(qmlCamera->property("mediaObject"));
那么您所要做的就是将探头连接到实际处理QVideoFrames的插槽,然后将探头的源设置为QCamera * beforelly cast:
connect(&probe_,SIGNAL(videoFrameProbed(QVideoFrame)),this,SLOT(handleFrame(QVideoFrame)));
probe_.setSource(camera_);
在我的例子camera_和probe_只是:
QCamera *camera_;
QVideoProbe probe_;
对于我的经验,这种方法比使用qt视频过滤器类更快(对于Android平台),但它的缺点是您基本上只读取qml的视频输出,而AFAIK您将无法将后处理的视频帧发回QML.
如果您真的需要将已处理的图像发送回qml,我建议您尝试第一种方法,看看会发生什么.
2)不用Qt AFAIK,也许与OpenCv或其他一些lib.
更多推荐


所有评论(0)