ZBLOG

持续的存储图像

如果你想要实现一个持续存储图像的功能,可以将图像采集和保存的过程放入一个循环中,并使用线程池来处理存储操作。这里是一个简单的示例,假设你有一个源(例如摄像头)不断地捕获图像并将其存储到文件中。

以下是一个完整的示例代码:

#include <QCoreApplication>
#include <QThreadPool>
#include <QRunnable>
#include <opencv2/opencv.hpp>
#include <iostream>
#include <atomic>

class ImageSaver : public QRunnable {
public:
    ImageSaver(const cv::Mat& image, const std::string& filename)
        : m_image(image), m_filename(filename) {}

    void run() override {
        // 保存图像到文件
        if (!cv::imwrite(m_filename, m_image)) {
            std::cerr << "Failed to save image: " << m_filename << std::endl;
        } else {
            std::cout << "Image saved: " << m_filename << std::endl;
        }
    }

private:
    cv::Mat m_image;
    std::string m_filename;
};

int main(int argc, char *argv[]) {
    QCoreApplication a(argc, argv);

    // 创建线程池
    QThreadPool threadPool;
    threadPool.setMaxThreadCount(2);  // 设置最大线程数为2

    // 打开摄像头
    cv::VideoCapture cap(0);
    if (!cap.isOpened()) {
        std::cerr << "Error opening video stream or file" << std::endl;
        return -1;
    }

    int imageCount = 0;  // 用于命名文件
    while (true) {
        cv::Mat frame;
        
        // 捕获一帧
        cap >> frame;

        if (frame.empty()) {
            break; // 如果没有捕获到帧,则退出循环
        }

        // 将图像保存任务提交到线程池中
        threadPool.start(new ImageSaver(frame.clone(), "image_" + std::to_string(imageCount++) + ".png"));

        // 可选:添加延迟以控制捕获频率(例如每秒捕获5张)
        QThread::sleep(1);  // 这会使程序每秒捕获一次图像,你可以根据需求调整或移除它。
        
        // 可以在此处加入条件以退出循环,例如检测特定键盘输入等

      }
    
     cap.release();  //释放摄像头资源

   return a.exec();
}

程序说明:

  1. 摄像头初始化:使用OpenCV中的cv::VideoCapture打开默认摄像头(索引0)。
  2. 持续读取:在while循环中,不断从摄像头捕捉图像。每次捕捉后,将图像传递给ImageSaver类进行异步保存。
  3. 文件命名:使用计数器来生成唯一的文件名。
  4. 可选延迟:使用QThread::sleep()来控制帧率,你可以根据需要调整这个时间。
  5. 资源管理:在结束时释放摄像头资源。

编译和运行:

  • 确保已正确安装Qt和OpenCV,并设置好项目文件如前面所述。
  • 然后编译并运行程序,它会开始从默认摄像头持续捕获并保存图像。

希望这个例子能够满足你的需求!如果你还有其他问题,请随时询问。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=21613

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?