我们在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)来监控图像存储区域上的文件系统事件。因此,每当新的JPEG到达分析时,您都可以有效地收到通知,然后您可以使用上述步骤自动检查是否为12位并生成相应的PPM
文件,并将12位JPEG移至磁盘上的其他保留区域,以防万一需要重新参考它。
如果你使用Mac,相当于fswatch
可以与自制软件一起安装。