我们在Linux上使用OpenCV来读取和处理常规的8位JPG。
我们现在正在从特定硬件接收12位JPG。 OpenCV无法阅读这些内容,我也无法尝试其他任何操作。是否有用于Linux的实用程序或库,使我们能够处理这些程序或库?也许转换为8位格式?
最新的libjpeg支持12位JPG作为编译时选项。这意味着同时编写支持常规8位和12位jpg的软件并不容易。但是我想知道是否有人已经解决了这个问题。
最佳答案
我对您提出的技术进行了一些改进。
首先,您可以通过使djpeg
发出PPM
文件来简化过程,并消除安装和依赖 ImageMagick 的需要,因为 OpenCV 仍然可以读取它们而无需任何库。因此,您的命令将变为:
djpeg > result.ppm < some12bitBadBoy.jpg
其次,如果这样做,您实际上会得到一个12/16位
PPM
文件,因此您可以在此过程中保留更多的颜色分辨率!identify -verbose result.ppm
Image: a.ppm
Format: PPM (Portable pixmap format (color))
Mime type: image/x-portable-pixmap
Class: DirectClass
Geometry: 227x149+0+0
Units: Undefined
Type: TrueColor
Endianess: Undefined
Colorspace: sRGB
Depth: 12-bit <---
Channel depth:
Red: 12-bit <---
Green: 12-bit <---
Blue: 12-bit <---
Channel statistics:
Pixels: 33823
Red:
min: 514 (0.125519)
max: 4095 (1)
mean: 2350.62 (0.574022)
standard deviation: 1102.04 (0.269119)
kurtosis: -1.39076
skewness: 0.13609
entropy: 0.971255
Green:
min: 305 (0.0744811)
max: 4095 (1)
mean: 1453.69 (0.354991)
standard deviation: 852.147 (0.208095)
kurtosis: 2.42348
skewness: 1.77043
entropy: 0.918006
Blue:
min: 213 (0.0520147)
max: 4095 (1)
mean: 1309.16 (0.319698)
standard deviation: 890.453 (0.217449)
kurtosis: 2.74961
skewness: 1.92239
...
...
对于其他试图查找难以捉摸的12位JPEG的人,我最终找到了一个here。
为了简化工作流程,进一步的建议可能是使用
inotify
(man page)监 View 像存储区域上的文件系统事件。因此,只要有新的JPEG进行分析,您就可以得到有效的通知,然后可以自动检查是否12位JPEG并使用上述过程生成相应的PPM
文件,然后将12位JPEG移到磁盘上的其他存放区域,以防万一。需要参考一下。如果您使用Mac,则等效于
fswatch
,可以与 homebrew 一起安装。关于opencv - 在Linux上转换12位jpg的方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47833604/