在linux上转换12位jpg的方法

问题描述 投票:0回答:1

我们在linux上使用OpenCV来读取和处理常规的8位JPG。

我们现在从特定的硬件接收12位JPG。 OpenCV无法读取这些内容,也无法读取其他任何内容。是否有一个Linux实用程序或库可以让我们处理这些?也许转换为8位格式?

最新的libjpeg支持12位JPG作为编译时选项。这意味着编写同时支持常规8位和12位jpg的软件并不容易。但我想知道是否有人已经解决了这个问题。

opencv jpeg
1个回答
1
投票

我对你提出的技术有一些改进。

首先,您可以通过使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


为简化您的工作流程,另一个建议可能是使用inotifyman page)来监控图像存储区域上的文件系统事件。因此,每当新的JPEG到达分析时,您都可以有效地收到通知,然后您可以使用上述步骤自动检查是否为12位并生成相应的PPM文件,并将12位JPEG移至磁盘上的其他保留区域,以防万一需要重新参考它。

如果你使用Mac,相当于fswatch可以与自制软件一起安装。

© www.soinside.com 2019 - 2024. All rights reserved.