我们在linux上使用OpenCV来读取和处理常规的8位JPG。
我们现在从特定的硬件接收12位JPG。 OpenCV无法读取这些内容,也无法读取其他任何内容。是否有一个Linux实用程序或库可以让我们处理这些?也许转换为8位格式?
最新的libjpeg支持12位JPG作为编译时选项。这意味着编写同时支持常规8位和12位jpg的软件并不容易。但我想知道是否有人已经解决了这个问题。
答案 0 :(得分:1)
我对你提出的技术有一些改进。
首先,您可以通过djpeg
发出PPM
文件来简化您的流程并消除安装和依赖 ImageMagick 的需要,因为 OpenCV < / strong>无论如何都可以阅读它们而不需要任何库。所以你的命令将成为:
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
,可以使用自制进行安装。