Programowanie w systemie UNIX/openexr/

Z Wikibooks, biblioteki wolnych podręczników.
Przejdź do nawigacji Przejdź do wyszukiwania

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)

Przykładowe pliki

narzędzia[edytuj]

  • exrdisplay, przykładowa aplikacja do przeglądania obrazów OpenEXR na wyświetlaczu przy różnych ustawieniach ekspozycji

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[1]

 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]

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[2] do 32-bit integer ( little-endian byte order)

OpenCV[edytuj]

Kod w pythonie: [3]

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


ImageMagic[edytuj]

ImageMagic od wersji 7 obsługuje OpenEXR[4]


Tworzymy testowe pliki[5]

pomoc[edytuj]

Online

Źródła[edytuj]

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