Как перевернуть изображение с 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::FrontFace и QCamera::BackFace в аргументе конструктора в QCamera, как показано ниже.

mCamera = new QCamera(QCamera::FrontFace);

и

mCamera = new QCamera(QCamera::BackFace );

Но оба не имеют никакой разницы. В Питоне

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

решит проблему, Любая идея, как решить эту проблему. Я использую Windows 10

Вы также используете OpenCV?

김선달 24.12.2020 12:54
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
1
491
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

QCamera::FrontFace и QCamera::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
})

Документация говорит, что зеркально (bool horizontal = false, bool vertical = true)

Возвращает зеркало изображения, зеркально отраженное в горизонтальном и/или вертикальном направлении, в зависимости от того, установлены ли для горизонтального и вертикального значения true или false.

ОБНОВЛЯТЬ:

Я нашел камеру, протестировал код и понял, что забыл одну важную вещь. Вам нужно использовать таймер, по которому QCameraImageCapture будет захватывать изображение.

Создайте QTimer и подключитесь к сигналу QTimer::timeout():

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

И после этого запустить таймер. Чтобы показать перевернутое изображение, вы можете использовать только класс QLabel с методом label->setPixmap(QPixmap::fromImage(flipped)).

я изменил код в соответствии с вашим ответом, но в графическом элементе View View ничего не отображается. я отредактировал свой ответ и также добавил ваш код ..

Arun K 24.12.2020 14:27

Доступна ли камера mCamera? Проверьте его состояние после запуска. Также вы можете попробовать подключиться к сигналу errorOccurred(). К сожалению, сейчас у меня нет камеры для тестирования. Но я думаю, что проблема в инициализации QCamera. Попробуйте загрузить камеры с помощью QCameraInfo::availableCameras() и использовать одну из них. Кроме того, попробуйте переместить mCamera->start() в конец функции.

Alloces 24.12.2020 14:44

я использую свою веб-камеру на коленях, у нее нет проблем, до сих пор она работает и с моим старым кодом.

Arun K 24.12.2020 15:00

Я обновил ответ и протестировал найденную камеру.

Alloces 24.12.2020 22:01

Я обновил свой код с помощью виджета метки (videoFrame) и сделал, как вы сказали. Но не повезло, мой вопрос обновлен новым кодом. Это правильно?

Arun K 25.12.2020 03:17

Нет, вы должны запустить таймер после соединений. И если вы используете этот код как метод класса, я думаю, вам следует переместить определение imageCamera в определение класса и использовать его как поле класса, например mCamera, чтобы избавиться от утечки памяти.

Alloces 25.12.2020 06:52

спасибо за вашу помощь, и код у меня работает..... В "QImage flipped = preview.mirrored(true,false);" я добавил параметры "true" и "false", иначе изображение отображается перевернутым. .

Arun K 25.12.2020 08:28

Хай, я изменил свой код в соответствии с ответом @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 должны быть объявлены в декларации класса.

Другие вопросы по теме