Programowanie w systemie UNIX/openexr/
Wygląd
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]- exrdisplay, przykładowa aplikacja do przeglądania obrazów OpenEXR na wyświetlaczu przy różnych ustawieniach ekspozycji
- tonemapper - A tool for exploring and applying various tonemapping operators by Tizian Zeltner
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]- ↑ blender manual: color management
- ↑ stackoverflow question: where-i-can-find-libopenexr-so-in-ubuntu
- ↑ scadacore tools : online-hex-converter
- ↑ stackoverflow question : reading-exr-files-in-opencv
- ↑ Imagemagick : high-dynamic-range
- ↑ stackoverflow question: converting-rgb-values-in-0-1-range-to-high-dynamic-range-exr-format