【发布时间】: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 谢谢。我找到了另一种使用标准化图像格式的方法。