我们在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/

10-15 02:21