gpt4 book ai didi

c++ - 录像机的多线程

转载 作者:行者123 更新时间:2023-11-28 01:54:52 25 4
gpt4 key购买 nike

我使用的是 GigEPRO 相机,根据图像大小,它具有 60fps 或更高的能力。因此对于 60fps 表示 1 帧/16ms。但 videowriter 功能本身消耗 2-4ms。所以我决定将图像存储在 vector<Mat> 中并创建一个 child_thread,负责使用 writer 将图像写入视频通过访问 vector 的图像并删除存储的图像,从 OpenCV 函数。

我对这个实现几乎没有疑问。我可以使用 vector<Mat> 吗?存储图像或我应该创建一个队列。?如何将 child_thread 与主线程同步?

我是多线程编程的新手,因此正在寻找一些输入

最佳答案

将采集线程和写入器/记录器线程与中间的帧队列分离是一种明智的做法。

在某些时候,传入流可能比输出写入操作更快(特别是如果您正在写入磁盘等慢速设备)。
为了防止队列不断增长(这会耗尽 PC 上的所有可用内存),您可以考虑使用具有最大项目限制的队列。

一种选择是编写您自己的类似队列的类:
1. 在内部使用合适的容器(即 std::queue<> 或 std::deque<>,因为默认的 std::queue 已经使用了 std::deque)
2. 只公开你需要的函数(即构造函数、push(frame)、pop()、size()、...)

为了线程安全,您可以考虑使用类内部 std::mutex 保护类队列类方法,最好使用 std::lock_guard<>。
更好的方法是使用无锁容器,正确编写更复杂,但您可以在网络或 github 上找到一些实现。

关于c++ - 录像机的多线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41565876/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com