gpt4 book ai didi

c++ - 从指针更改 OpenCV 矩阵的数据

转载 作者:行者123 更新时间:2023-11-28 05:13:27 24 4
gpt4 key购买 nike

我正在尝试使用摄像头驱动程序、OpenCV 和 C++ 从多个摄像头捕获图像。我的目标是获得尽可能多的 FPS,为此我发现将图像保存在硬盘中是最慢的操作。为了加快这个过程,我在单独的线程中进行每个保存。问题是,我仍然需要等待保存完成以避免捕获的图像被覆盖。这样做可以提供良好的结果,但由于未知原因,每 30-40 帧速度提高 10 倍。

我通过创建一个用于存储图像的环形缓冲区来解决这个问题,因为这些写入速度的突然下降非常短暂。我使用这种方法获得了非常好的结果,但不幸的是,对于超过 3 个摄像头,摄像头驱动程序无法处理压力,我的程序停止,等待保存第 4 个摄像头的第一张图像。我检查了一下,这不是 CPU,因为 3 个摄像头 + 一个在磁盘中写入随机数据的线程工作正常。

现在,看到使用 opencv 如何减轻相机驱动程序的压力,我想创建一个 OpenCV mat 缓冲区来保存图像,同时保存图像而不用我的相机覆盖它们(好吧,直到缓冲区完成整个圈,我会确保不会发生)。

我知道我能做到

cv::Mat colorFrame(cv::Size(width, height),CV_8UC3,pointerToMemoryOfCamera);

从相机写入的内存中初始化帧。这并不能解决我的问题,因为它只会指向数据,而当相机覆盖它时,它会破坏保存的图像。

如何创建一个给定大小和类型的矩阵,然后将内存中的内容复制到这个矩阵中?

最佳答案

您需要创建一个深拷贝。您可以使用 clone :

cv::Mat colorFrame = cv::Mat(height, width, CV_8UC3, pointerToMemoryOfCamera).clone();

您还可以使用 matwrite and matread functions 加快保存图像的过程。 .

关于c++ - 从指针更改 OpenCV 矩阵的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43121352/

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