如何从 QCamera 翻转图像?

How to flip image from QCamera?

在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

QCamera::FrontFaceQCamera::BackFace只是相机的positions。为了达到你想要的效果,你应该翻转每张图片。

创建 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
})

Documentation 表示 镜像(bool horizo​​ntal = false, bool vertical = true)

Returns a mirror of the image, mirrored in the horizontal and/or the vertical direction depending on whether horizontal and vertical are set to true or false.

更新:

我找到了摄像头并测试了代码,发现我忘记了一件重要的事情。您需要使用计时器,QCameraImageCapture 将通过该计时器捕获图像。

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

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

然后开始计时。要显示翻转图像,您可以使用 QLabel class 和 label->setPixmap(QPixmap::fromImage(flipped)) 方法。

嗨,我根据@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 应该在 class decleration

中声明