【问题标题】:Fast 16-bit grayscale image writing (30fps)快速 16 位灰度图像写入 (30fps)
【发布时间】:2020-11-03 18:56:09
【问题描述】:

我有一个 30fps (1024x768px) 的 16 位灰度相机流,并且希望尽可能快地将每个图像写入硬盘。图像不应该用有损方法压缩,我需要进一步处理。

我尝试过,但不幸的是 PNG 和 TIFF 速度很慢,而且 BMP 在 openCV 中不支持 16 位。

您知道如何实现这一目标吗? 下面是在 OpenCV 中写入和读取 PNG 的示例。改变 PNG 的压缩级别是不够的。从相机读取图像仍然比写入快。我也尝试过在 boost 线程池中使用多个线程,但没有成功。

谢谢

#include <iostream>
#include <opencv2/imgcodecs.hpp>

int main(int argc, char *argv[])
{
    cv::Mat imOut = cv::Mat::ones(cv::Size(1024, 768), CV_16UC1);
    cv::imwrite("test.png", imOut); 
    return 0;
}

编辑:

系统:

  • Windows 10 64 位
  • MSVC c++ 编译器
  • CPU Intel i7
  • 16 GB RAM(但应该用更少)
  • 磁盘子系统:最好是直接写入外部USB 3硬盘,但可能的内部硬盘也可以。很遗憾,SSD 不可用

【问题讨论】:

  • 您需要获取多长时间?你使用什么操作系统?什么CPU?您的磁盘子系统是什么样的?你有多少内存?
  • 使用系统属性编辑了我的帖子。
  • @Alex F:如果可能的话,我会避免两步解决方案。这将是我的后备解决方案。谢谢
  • 检查this。您可以使用 matwrite 保存图像,然后使用 matread 直接在 cv::Mat 中加载它们。
  • @Miki 谢谢。我找到了另一种使用标准化图像格式的方法。

标签: c++ opencv


【解决方案1】:

我找到了一个没有记录的答案。

PGM 格式支持 16 位灰度,写入速度快。

cv::imwrite("test.pgm", imOut); 

我打开了一个问题来更新 OpenCV 文档。 OpenCV 4.5.0 imwrite DocumentationOpenCV Issue

谢谢。

【讨论】:

    猜你喜欢
    • 2015-06-29
    • 1970-01-01
    • 2020-05-15
    • 2017-07-31
    • 2012-06-13
    • 2012-11-18
    • 1970-01-01
    • 2015-08-11
    • 2011-12-25
    相关资源
    最近更新 更多