Qt在windows环境下如何使用Qcamera录制mp4格式的视频?
1条回答 默认 最新
关注 - 这篇博客: QT QCamera操作摄像头拍照调试记录中的 QT QCamera操作摄像头拍照调试记录 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
直接上代码.
widget.h
#define WIDGET_H #include <QWidget> #include <QCamera> #include <QCameraControl> #include <QCameraViewfinder> #include <QCameraImageCapture> #include <QList> #include <QDebug> #include <QImage> #include <QBuffer> #include <QMediaRecorder> namespace Ui { class Widget; } class Widget : public QWidget { Q_OBJECT public: explicit Widget(QWidget *parent = 0); ~Widget(); public slots: void ShowTheCapture(); void SavePicture(); void displayImage(int,QImage image); void displayvideo(int, QVideoFrame video); void issaved(int, const QString &fileName); public: QCamera *camera;//摄像头 QCameraImageCapture * imageCapture;//截图部件 QBuffer buf; private: Ui::Widget *ui; }; #endif // WIDGET_H
widget.cpp
#include "widget.h" #include "ui_widget.h" #include <QBuffer> #include <QDir> Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget) { ui->setupUi(this); ui->label->setScaledContents(true); //自适应内容大小,用来展示截图 camera=new QCamera;//摄像头 imageCapture=new QCameraImageCapture(camera);//截图部件 QCameraViewfinderSettings set; //相机取景设置可以设置分辨率.帧率...详细参考官方文档 //set.setResolution(800, 600); //设置显示分辨率,嵌入式设备需要手动指定 set.setMaximumFrameRate(30); //设置帧率,//由于前期在电脑测试成功.移植到嵌入式开发板的时候发现视频采集画面卡顿,调试发现帧率不匹配.在这里需要手动设置下. camera->setViewfinderSettings(set); camera->setViewfinder(ui->viewfinder); camera->start(); //启动摄像头 //为了测试嵌入式设备是否支持帧缓存.嵌入式设备保存文件操作很慢.用来检测是否支持缓存 //qDebug() << imageCapture->isCaptureDestinationSupported(QCameraImageCapture::CaptureToBuffer); //qDebug() << imageCapture->isCaptureDestinationSupported(QCameraImageCapture::CaptureToFile); imageCapture->setCaptureDestination(QCameraImageCapture::CaptureToFile); //imageCapture->setCaptureDestination(QCameraImageCapture::CaptureToBuffer); imageCapture->setBufferFormat(QVideoFrame::PixelFormat::Format_Jpeg); //设置保存的图片格式 connect(imageCapture, SIGNAL(imageCaptured(int,QImage)), this, SLOT(displayImage(int,QImage))); connect(imageCapture, SIGNAL(imageSaved(int,QString)), this, SLOT(issaved(int,QString))); //connect(imageCapture, SIGNAL(imageAvailable(int,QVideoFrame)), this, SLOT(displayvideo(int,QVideoFrame))); connect(ui->pushButton,SIGNAL(clicked()),this,SLOT(ShowTheCapture())); connect(ui->SaveButton,SIGNAL(clicked()),this,SLOT(SavePicture())); } Widget::~Widget() { delete ui; } void Widget::ShowTheCapture() { //按下截图按钮 camera->setCaptureMode(QCamera::CaptureStillImage); //截图模式 camera->searchAndLock(); //加锁 imageCapture->capture(); //取景器截图, 内部机制参考官方文档, //不指定参数时,有个默认保存路径.一般都默认当前用户主目录 //imageCapture->capture("/tmp/test.jpg"); //这里自定保存路径 camera->unlock(); } void Widget::displayImage(int ,QImage image) { //显示帧内容 //image=image.convertToFormat(QImage::Format_RGB888); ui->label->setPixmap(QPixmap::fromImage(image)); } void Widget::issaved(int id, const QString &fileName) { //图片保存成功后自动调用,fileName就是保存的图片绝对路径 qDebug() << "Save file: " << fileName; camera->setCaptureMode(QCamera::CaptureViewfinder); //重新设置摄像头模式取景显示.要不然取景器画面会卡住. QDir dir; dir.remove(fileName); //这里删除系统自动保存的图片.后面进行自己处理 SavePicture() } void Widget::displayvideo(int, QVideoFrame video) { qDebug() << video.endTime(); } void Widget::SavePicture() { //自定义的图片处理 qDebug() << "Mine "; //imageCapture->cancelCapture(); const QPixmap *pixmap = ui->label->pixmap(); if(pixmap) { pixmap->save("/mnt/test/qttest/qt5test/hello.jpg"); //自己保存图片,以及后续处理 qDebug()<<"Send Base64"; QByteArray ba; QBuffer buf(&ba); //这里将图片转Base64 pixmap->save(&buf,"jpg"); QByteArray hexed = ba.toBase64(); buf.close(); qDebug() << "Base64" << hexed.data(); } ui->label->clear(); }
main.cpp 没有什么
#include "widget.h" #include <QApplication> int main(int argc, char *argv[]) { QApplication a(argc, argv); Widget w; w.show(); return a.exec(); }
widget.ui
ui->viewfinder 是一个QWidget 需要提升窗口部件为 QCameraViewfinder
完成
解决 无用评论 打赏 举报- 这篇博客: QT QCamera操作摄像头拍照调试记录中的 QT QCamera操作摄像头拍照调试记录 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
悬赏问题
- ¥15 从键盘随机输入A-H中的一串字符串,用七段数码管方法进行绘制。提交代码及运行截图。
- ¥15 TYPCE母转母,插入认方向
- ¥15 如何用python向钉钉机器人发送可以放大的图片?
- ¥15 matlab(相关搜索:紧聚焦)
- ¥15 基于51单片机的厨房煤气泄露检测报警系统设计
- ¥15 路易威登官网 里边的参数逆向
- ¥15 Arduino无法同时连接多个hx711模块,如何解决?
- ¥50 需求一个up主付费课程
- ¥20 模型在y分布之外的数据上预测能力不好如何解决
- ¥15 processing提取音乐节奏