qt通过电脑摄像头捕获图像并显示,qml

import QtQuick 2.15
import QtQuick.Window 2.15
import QtMultimedia 6.3
import QtQuick.Controls 2.15

Window {
    visible: true
    width: 640
    height: 480
    title: "Camera Preview" 
    MediaDevices {
        id: mediaDevices
    }
    //CaptureSession is a session,here is connect camera and vidiooutput
    CaptureSession {
        camera: Camera {
            id: camera
            cameraDevice: mediaDevices.defaultVideoInput
            focusMode: Camera.FocusModeAutoNear
            customFocusPoint: Qt.point(0.2, 0.2) // Focus relative to top-left corner
            Component.onCompleted: {
                camera.start()
            }
        }
        videoOutput: videoOutput
    }
    VideoOutput {
        id: videoOutput
        anchors.fill: parent
    }
}

MediaDevices提供了设备列表,让下面的camera可以找到相机设备

CaptureSession相当于一个会话控制,连接相机(camera)和输出平台(videoOutput )

最后要记得打开摄像头!!!一开始复制官方的demo老是显示不了画面就是没有打开摄像头TAT,问ai它还说是不用手动控制开启画面,captureseesion会自动控制,人工zz害我找了两小时问题,最后还是乱翻文档,翻到camera有个active:bool的property,测试了一下一直是false,然后去翻camera的方法,发现有个start(),通过camera.start()才解决不能显示画面这个问题。

我想像的CaptureSession应该就是让一个窗口显示画面(需要画面源和显示窗口),所以如果我想让摄像头的画面显示在多个窗口,只需要设置多个VideoOutput和CaptureSeesion,这样一个画面源多个显示窗口的效果就有了,但是试了一下,发现不行,只会显示一个窗口,不知道为什么。后面再研究。

要在Qt显示摄像头画面,可以使用Qt Multimedia模块中的QCamera类。以下是一个简单的示例代码: ```cpp #include <QtMultimedia/QCamera> #include <QtMultimediaWidgets/QCameraViewfinder> #include <QtWidgets/QVBoxLayout> #include <QtWidgets/QApplication> #include <QtWidgets/QWidget> int main(int argc, char *argv[]) { QApplication app(argc, argv); QWidget window; QVBoxLayout *layout = new QVBoxLayout(); QCamera *camera = new QCamera(); QCameraViewfinder *viewfinder = new QCameraViewfinder(); camera->setViewfinder(viewfinder); layout->addWidget(viewfinder); window.setLayout(layout); window.show(); camera->start(); return app.exec(); } ``` 要实现画面放大缩小,可以在QCameraViewfinder中使用QGraphicsView和QGraphicsScene来实现。以下是一个示例代码: ```cpp #include <QtMultimedia/QCamera> #include <QtMultimediaWidgets/QCameraViewfinder> #include <QtWidgets/QVBoxLayout> #include <QtWidgets/QGraphicsView> #include <QtWidgets/QGraphicsScene> #include <QtWidgets/QApplication> #include <QtWidgets/QWidget> int main(int argc, char *argv[]) { QApplication app(argc, argv); QWidget window; QVBoxLayout *layout = new QVBoxLayout(); QCamera *camera = new QCamera(); QCameraViewfinder *viewfinder = new QCameraViewfinder(); camera->setViewfinder(viewfinder); layout->addWidget(viewfinder); QGraphicsView *graphicsView = new QGraphicsView(); QGraphicsScene *scene = new QGraphicsScene(); graphicsView->setScene(scene); layout->addWidget(graphicsView); QGraphicsPixmapItem *pixmapItem = new QGraphicsPixmapItem(); scene->addItem(pixmapItem); QObject::connect(viewfinder, &QCameraViewfinder::frameChanged, [&]() { pixmapItem->setPixmap(viewfinder->grab().scaled(graphicsView->size(), Qt::KeepAspectRatio)); }); window.setLayout(layout); window.show(); camera->start(); return app.exec(); } ``` 该示例代码中,我们使用QGraphicsView和QGraphicsScene来显示图像,并使用QGraphicsPixmapItem来显示图像。我们在QCameraViewfinder的frameChanged信号中,使用viewfinder->grab()获取当前的帧图像,然后使用scaled()函数将其缩放到QGraphicsView的大小,并使用setPixmap()函数将其设置到QGraphicsPixmapItem中。因此,我们就可以通过QGraphicsView的缩放功能来实现画面的放大缩小了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值