• Qt调用摄像头(截取并保存图片)


    原地址:http://blog.csdn.net/liang19890820/article/details/12782531

    Qt如何调用系统摄像设备进行显示、截图、录制?

        QCamera:系统摄像设备(摄像头)
        QCameraViewfinder:摄像取景器部件
        QCameraImageCapture:截图部件
     
    capture按钮:用于截图(截图后在右上角显示)
    save按钮:用于保存截取后的图片(此处测试路径为:F:a.jpg)
    exit按钮:退出界面
     
    效果如下:
     
     
    代码如下:
     
    #include "test_capture.h"
    Dialog::Dialog(QWidget *parent) :
    QDialog(parent)
    {
    this->resize(600, 400);
     
    camera = new QCamera();
    view_finder = new QCameraViewfinder();
    camera_image_capture = new QCameraImageCapture(camera);
    capture_button = new QPushButton();
    save_button = new QPushButton();
    exit_button = new QPushButton(); 
    display_label = new QLabel();
     
    QHBoxLayout *main_layout = new QHBoxLayout();
    QVBoxLayout *v_layout = new QVBoxLayout();
     
    display_label->setFixedSize(150, 150);
    display_label->setScaledContents(true);
     
    v_layout->addWidget(display_label);
    v_layout->addStretch();
    v_layout->addWidget(capture_button);
    v_layout->addWidget(save_button);
    v_layout->addWidget(exit_button);
     
    main_layout->addWidget(view_finder);
    main_layout->addLayout(v_layout);
     
    connect(capture_button, &QPushButton::clicked, this, &Dialog::captureImage);
    connect(save_button, &QPushButton::clicked, this, &Dialog::saveImage);
    connect(exit_button, &QPushButton::clicked, this, &Dialog::close);
    connect(camera_image_capture, &QCameraImageCapture::imageCaptured, this, &Dialog::displayImage);
     
    camera_image_capture->setCaptureDestination(QCameraImageCapture::CaptureToFile);
    camera->setCaptureMode(QCamera::CaptureStillImage);
    camera->setViewfinder(view_finder);
    camera->start(); //启动摄像头
     
    this->setLayout(main_layout);
    this->translateLanguage();
    }
     
    Dialog::~Dialog()
    {
     
    }
     
    void Dialog::translateLanguage()
    {
    this->setWindowTitle("testCapture");
    capture_button->setText(tr("capture"));
    save_button->setText(tr("save"));
    exit_button->setText(tr("exit"));
    }
     
    void Dialog::displayImage(int id, QImage image)
    {
    display_label->setPixmap(QPixmap::fromImage(image));  
    }
     
    void Dialog::captureImage()
    {
    //截图
    camera_image_capture->capture();  
    }
     
    void Dialog::saveImage()
    {
    const QPixmap *pixmap = display_label->pixmap();
    if(pixmap)
    {
    pixmap->save("F:\a.jpg");
    }
    }
  • 相关阅读:
    Spring Boot 无侵入式 实现 API 接口统一 JSON 格式返回
    Java8 Stream:2万字20个实例,玩转集合的筛选、归约、分组、聚合
    排名前 16 的 Java 工具类
    万字详解,JDK8 的 Lambda、Stream 和日期的使用详解
    这样规范写代码,同事直呼“666”
    Java多线程高并发学习笔记——阻塞队列
    零散的MySQL基础总是记不住?看这一篇就够了!
    Java 中自定义注解及使用场景
    最简单的6种防止数据重复提交的方法!
    选择数据库联系人【选择之后将不在列表】
  • 原文地址:https://www.cnblogs.com/lanye/p/3528652.html
Copyright © 2020-2023  润新知