0

在 QT Creator 中,我们如何从相机中获取图像。我用谷歌搜索了很多,但没有找到合适的解决方案。以下是我的代码。

mCamera = new QCamera;
    mViewfinder = new QCameraViewfinder;
    mLayout = new QVBoxLayout(ui->graphicsView);
    mLayout->addWidget(mViewfinder);
    mCamera->setViewfinder(mViewfinder);
    mViewfinder->show();
    mCamera->start();

我在 QCamera 的构造函数参数中尝试了 QCamera::FrontFace 和 QCamera::BackFace ,如下所示

mCamera = new QCamera(QCamera::FrontFace);

mCamera = new QCamera(QCamera::BackFace );

但两者没有区别。在 Python 中

video=cv2.flip(self.frame,1)

将解决问题,知道如何解决这个问题..我使用的是 Windows 10

4

2 回答 2

3

QCamera::FrontFaceQCamera::BackFace只是相机的位置。为了实现你想要的,你应该翻转每一个图像。

创建QCameraImageCapture并连接到它的imageCaptured()信号。

auto imageCapture = new QCameraImageCapture( mCamera );
connect(imageCapture, &QCameraImageCapture::imageCaptured, [&](int id, const QImage &preview){
    QImage flipped = preview.mirrored();
    // do what you want with flipped image
})

文档镜像(布尔水平=假,布尔垂直=真)

返回图像的镜像,在水平和/或垂直方向上镜像,具体取决于水平和垂直设置为真还是假。

更新:

我找到了相机并测试了代码,并意识到我忘记了一件重要的事情。您需要使用QCameraImageCapture捕获图像的计时器。

创建QTimer并连接到QTimer::timeout()信号:

connect (&timer, &QTimer::timeout, [&](){
    camera->searchAndLock();
    imageCapture->capture();
    camera->unlock();
});

然后启动计时器。要显示翻转的图像,您可以只使用带有方法的QLabel类。label->setPixmap(QPixmap::fromImage(flipped))

于 2020-12-24T11:59:02.823 回答
1

海我根据@Allocse 的回答更改了我的代码及其对我的工作我的完整代码将是

mCamera = new QCamera;
    mCamera->start();
    imageCapture = new QCameraImageCapture( mCamera );
    connect (&timer, &QTimer::timeout, [&](){
    mCamera->searchAndLock();
    imageCapture->capture();
    mCamera->unlock();
    });
    connect(imageCapture, &QCameraImageCapture::imageCaptured, [&](int id, const QImage &preview){
    QImage flipped = preview.mirrored(true,false);

    ui->videoFrame->setPixmap(QPixmap::fromImage(flipped));
    });
     timer.start();

注意:-mCamera 和 imageCapture 应该在类声明中声明

于 2020-12-25T07:24:35.533 回答