在Linux

时间:2017-12-15 13:42:45

标签: opencv jpeg

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

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

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

1 个答案:

答案 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

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

如果您使用的是Mac,则等效值为fswatch,可以使用自制进行安装。