使用opencv'时如何确定图像格式/编码;伊姆雷德 我试图在C++中基于OpenCV编写一个简单的特征检测程序,用于UNIX管道风格的工具链,意思是通过“代码> STDIN < /Cube >接收到的图像,处理后的图像被输出到 StdOut

使用opencv'时如何确定图像格式/编码;伊姆雷德 我试图在C++中基于OpenCV编写一个简单的特征检测程序,用于UNIX管道风格的工具链,意思是通过“代码> STDIN < /Cube >接收到的图像,处理后的图像被输出到 StdOut ,c++,opencv,image-processing,mime-types,imread,C++,Opencv,Image Processing,Mime Types,Imread,目前,我正在使用OpenCV的imread-函数从stdin-流中读取图像,该流本身工作正常,但是我需要知道正在读取的图像格式,以便可以相应地对程序的输出图像进行编码 我知道一旦图像被读取到OpenCV Mat中,它就会自动解码——因此我需要找到一种方法来事先确定原始图像的图像格式 然而,到目前为止,我只能想出一种解决方法,首先将图像读入缓冲区,然后使用file命令中的魔法文件来探测文件类型,然后将缓冲数据传递给OpenCV 无可否认,我没有做过任何性能测试,我很确定这是一种非常缓慢的实现方法,

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

我知道一旦图像被读取到OpenCV Mat中,它就会自动解码——因此我需要找到一种方法来事先确定原始图像的图像格式

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

无可否认,我没有做过任何性能测试,我很确定这是一种非常缓慢的实现方法,因为我假设OpenCV在图像解码时也在做类似的内部操作,因此两次检测格式肯定比只检测一次格式要慢

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


提前谢谢

如果不进行测量,您就“非常确定”比较几个字节将是您的性能瓶颈,而不是读取图像数据的I/O操作?尽一切努力避免使用
文件
的magic数据库进行这种笨拙的变通,但不要因为错误的原因而这样做。“使用OpenCV的imread函数从stdin流读取图像”——你能详细说明一下吗?AFAIK
imread
仅根据作为第一个参数给定的文件名字符串读取文件衡量,不要假设OpenCV已经可以选择正确的解码器了。它不是公开的,而是公开的。在没有测量它的情况下,您“非常确定”比较几个字节将是您的性能瓶颈,而不是您读取图像数据的I/O操作?尽一切努力避免使用
文件
的magic数据库进行这种笨拙的变通,但不要因为错误的原因而这样做。“使用OpenCV的imread函数从stdin流读取图像”——你能详细说明一下吗?AFAIK
imread
仅根据作为第一个参数给定的文件名字符串读取文件衡量,不要假设OpenCV已经可以选择正确的解码器了。它没有暴露在外,但它相当危险。