首页 > 解决方案 > 使用opencv的imread时如何确定图像格式/编码

问题描述

我正在尝试在基于 OpenCV 的 C++ 中编写一个简单的特征检测程序,以用于 Unix 管道式工具链,这意味着读入的图像是通过接收stdin的,处理后的图像输出到stdout.

目前我正在使用 OpenCV 的imread- 函数从 -stream 中读取图像,stdin这本身可以正常工作,但是我需要以某种方式知道正在读取的图像格式,以便可以对程序的输出图像进行相应的编码。

我知道一旦图像被读入 OpenCV Mat,它就会自动解码 - 所以我需要找到一种方法来事先确定原始图像的图像格式。

然而,到目前为止,我只能想出一种解决方法,即首先将图像读入缓冲区,然后使用file命令中的魔法文件来探测文件类型,然后将缓冲的数据传递给 OpenCV。

诚然没有对性能进行任何测试我很确定这是实现这一目标的一种非常缓慢的方法,正如我所假设的那样,OpenCV 在图像解码时在内部做类似的事情,因此两次检测格式肯定比格式检测慢只做一次。

有没有更复杂的方法来实现这个目标,或者原始图像编码(最好!)可以通过 OpenCV 以我可能错过的任何方式本地访问?

提前致谢!

标签: c++opencvimage-processingmime-typesimread

解决方案


推荐阅读