Programowanie w systemie UNIX/openexr/

OpenEXR to

  • otwarty format zapisu obrazów HDR, stworzony przez firmę Industrial Light and Magic
  • Biblioteki programistyczne
  • narzędzia do pracy z plikami OpenEXR


składniki edytuj

biblioteki edytuj

  • IlmImf, biblioteka odczytująca i zapisująca obrazy OpenEXR. stworzona przez Industrial Light & Magic (ILM), stąd pełna nazwa to libilmilf = lib + ilm + ilf
  • IlmImfUtil, wygodna biblioteka upraszczająca tworzenie narzędzi OpenEXR.
  • Imath, biblioteka matematyczna obsługująca macierze, transformacje 2d i 3d, rozwiązywanie równań liniowych / kwadratowych / sześciennych i nie tylko.

pliki edytuj

Pliki OpenEXR

  • są to pliki binarne ( nie tekstowe)
  • mają rozszerzenie exr
  • pierwsze 4 bajty każdego pliku OpenEXR zawierają 32-bit integer "magic number" = 20000630 ( little-endian byte order) = 76 2f 31 01 ( hex)
  • kolory są zapisane z użyciem liniowej przestrzeni kolorów[1]
  • mogą zawierać dane nie będące kolorami ( Non-Color Data), na przykład mapy normalnych lub przemieszczeń zawierają jedynie wektory i przesunięcia. Takie obrazy powinny być oznaczone jako Dane niekolorowe ( ang. Non-Color Data), aby nie nastąpiła na nich żadna konwersja przestrzeni kolorów.


Przykładowe pliki

narzędzia edytuj

klasy edytuj

  • Half, klasa C ++ do manipulowania połówkami wartości, tak jakby były one wbudowanym typem danych C ++.

instalacja edytuj

 sudo apt-get install libopenexr-dev
 sudo apt-get install openexr
 sudo apt install openexr-viewers

sprawdzanie edytuj

 apt-cache search openexr

Przykładowy wynik:

imagemagick-6.q16 - Programy do przetwarzania obrazów - "głębokość kwantowa" Q16
imagemagick-6.q16hdri - image manipulation programs -- quantum depth Q16HDRI
libilmbase-dev - development files for IlmBase
libilmbase24 - several utility libraries from ILM used by OpenEXR
libjxr-dbg - JPEG-XR lib - debug files
libjxr-dev - JPEG-XR lib - dev files
libjxr-tools - JPEG-XR lib - command line apps
libjxr0 - JPEG-XR lib - libraries
libmagickcore-6.q16-6-extra - low-level image manipulation library - extra codecs (Q16)
libmagickcore-6.q16hdri-6-extra - low-level image manipulation library - extra codecs (Q16HDRI)
libopenexr-dev - development files for the OpenEXR image library
libopenexr24 - runtime files for the OpenEXR image library
libopenimageio-dev - Library for reading and writing images - development
libopenimageio-doc - Library for reading and writing images - documentation
libopenimageio2.1 - Library for reading and writing images - runtime
luminance-hdr - graphical user interface providing a workflow for HDR imaging
openexr - command-line tools for the OpenEXR image format
openexr-doc - documentation and examples for the OpenEXR image format
openexr-viewers - viewer for images in the OpenEXR format
openimageio-tools - Library for reading and writing images - command line tools
python3-openimageio - Library for reading and writing images - Python bindings



 ldconfig -p | grep openexr

Nie ma  żadnych wyników

Szukamy biblioteki libIlmImf:

 ldconfig -p | grep libIlmImf

Przykładowy wynik

  libIlmImfUtil-2_3.so.24 (libc6,x86-64) => /lib/x86_64-linux-gnu/libIlmImfUtil-2_3.so.24
  libIlmImf-2_3.so.24 (libc6,x86-64) => /lib/x86_64-linux-gnu/libIlmImf-2_3.so.24

Za pomocą dlocate[2]

 dlocate openexr


przykładowy wynik:

gstreamer1.0-plugins-bad:amd64: /usr/lib/x86_64-linux-gnu/gstreamer-1.0/libgstopenexr.so
libopenexr24:amd64: /.
libopenexr24:amd64: /usr
libopenexr24:amd64: /usr/lib
libopenexr24:amd64: /usr/lib/x86_64-linux-gnu
libopenexr24:amd64: /usr/lib/x86_64-linux-gnu/libIlmImf-2_3.so.24.0.0
libopenexr24:amd64: /usr/lib/x86_64-linux-gnu/libIlmImfUtil-2_3.so.24.0.0
libopenexr24:amd64: /usr/share
libopenexr24:amd64: /usr/share/doc
libopenexr24:amd64: /usr/share/doc/libopenexr24
libopenexr24:amd64: /usr/share/doc/libopenexr24/changelog.Debian.gz
libopenexr24:amd64: /usr/share/doc/libopenexr24/copyright
libopenexr24:amd64: /usr/share/lintian
libopenexr24:amd64: /usr/share/lintian/overrides
libopenexr24:amd64: /usr/share/lintian/overrides/libopenexr24
libopenexr24:amd64: /usr/lib/x86_64-linux-gnu/libIlmImf-2_3.so.24
libopenexr24:amd64: /usr/lib/x86_64-linux-gnu/libIlmImfUtil-2_3.so.24
...

użycie edytuj

API edytuj

file edytuj

Sprawdzmy plik exr za pomocą polecenia file

 file ./kf.exr

przykładowy wynik:

 ./kf.exr: OpenEXR image data, version 2, storage: scanline, compression: zip, dataWindow: (0 0)-(639 359), displayWindow: (0 0)-(639 359), lineOrder: increasing y

Inne opcje:

  file -bi kf.exr

wynik:

  image/x-exr; charset=binary


strings edytuj

 strings kf.exr|head

przykładowy wynik:

Iterations
IterationsBias
KallesFraktaler2+
string
Re: 0.0000000000000000000000000000
Im: 0.0000000000000000000000000000
Zoom: 1.0000000000000000E0
Iterations: 200
IterDiv: 0.0100000000000000002
SmoothMethod: 0

exrdisplay edytuj

 exrdisplay e.exr

xxd edytuj

 xxd -l 4  -c 4 kf.exr

przykładowy wynik:

 00000000: 762f 3101  v/1.

Można to przekształcić online[3] do 32-bit integer ( little-endian byte order)

OpenCV edytuj

Kod w pythonie: [4]

 cv2.imread(PATH_TO_EXR_FILE,  cv2.IMREAD_ANYCOLOR | cv2.IMREAD_ANYDEPTH)


ImageMagic edytuj

ImageMagic od wersji 7 obsługuje OpenEXR[5]


Tworzymy testowe pliki[6]

zewnętrzne programy= edytuj

pomoc edytuj

Online

Źródła edytuj

  1. blender manual: color management
  2. stackoverflow question: where-i-can-find-libopenexr-so-in-ubuntu
  3. scadacore tools : online-hex-converter
  4. stackoverflow question : reading-exr-files-in-opencv
  5. Imagemagick : high-dynamic-range
  6. stackoverflow question: converting-rgb-values-in-0-1-range-to-high-dynamic-range-exr-format