关于使用QT的QFileDialog打开视频文件后,VideoCapture.open()一直打开失败的问题:opencv isOpen() false

我的问题尝试了目前网上能搜索到的大部分情况后isopen()还是false,第二天终于被我发现了:

 

把这个.dll文件放在这就OK了。

使用的opencv版本为310。

以下是使用QtOpenCV打开摄像头,录取视频和截图的代码: mainwindow.h ```c++ #ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> #include <opencv2/opencv.hpp> namespace Ui { class MainWindow; } class MainWindow : public QMainWindow { Q_OBJECT public: explicit MainWindow(QWidget *parent = 0); ~MainWindow(); private slots: void on_pushButton_OpenCamera_clicked(); void on_pushButton_Record_clicked(); void on_pushButton_Screenshot_clicked(); private: Ui::MainWindow *ui; cv::VideoCapture cap; cv::VideoWriter writer; bool isRecording; }; #endif // MAINWINDOW_H ``` mainwindow.cpp ```c++ #include "mainwindow.h" #include "ui_mainwindow.h" #include <QFileDialog> #include <QMessageBox> MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow), isRecording(false) { ui->setupUi(this); } MainWindow::~MainWindow() { delete ui; } void MainWindow::on_pushButton_OpenCamera_clicked() { if(!cap.isOpened()){ cap.open(0); if(cap.isOpened()){ ui->pushButton_OpenCamera->setText("Close Camera"); } else{ QMessageBox::warning(this, "Error", "Failed to open camera."); } } else{ cap.release(); ui->pushButton_OpenCamera->setText("Open Camera"); } } void MainWindow::on_pushButton_Record_clicked() { if(!cap.isOpened()){ QMessageBox::warning(this, "Error", "Please open camera first."); return; } if(!isRecording){ QString filename = QFileDialog::getSaveFileName(this, "Save Video", ".", "Videos (*.avi)"); if(filename.isEmpty()){ return; } writer.open(filename.toStdString(), cv::VideoWriter::fourcc('M', 'J', 'P', 'G'), 25.0, cv::Size(cap.get(cv::CAP_PROP_FRAME_WIDTH), cap.get(cv::CAP_PROP_FRAME_HEIGHT))); if(!writer.isOpened()){ QMessageBox::warning(this, "Error", "Failed to save video."); return; } isRecording = true; ui->pushButton_Record->setText("Stop Record"); } else{ writer.release(); isRecording = false; ui->pushButton_Record->setText("Start Record"); } } void MainWindow::on_pushButton_Screenshot_clicked() { if(!cap.isOpened()){ QMessageBox::warning(this, "Error", "Please open camera first."); return; } cv::Mat frame; cap.read(frame); if(frame.empty()){ QMessageBox::warning(this, "Error", "Failed to get frame."); return; } QString filename = QFileDialog::getSaveFileName(this, "Save Screenshot", ".", "Images (*.png *.jpg)"); if(filename.isEmpty()){ return; } cv::imwrite(filename.toStdString(), frame); } ``` 这个代码利用了Qt的UI设计,包含了三个按钮:打开摄像头,开始/停止录制和截图。打开摄像头使用OpenCVVideoCapture类,录制视频使用VideoWriter类,截图则是读取一帧图像并使用imwrite函数保存。 希望这个代码对你有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值