|
@@ -1 +1,42 @@
|
|
# Tutorial 01 - Basic Image I/O Operations
|
|
# Tutorial 01 - Basic Image I/O Operations
|
|
|
|
+
|
|
|
|
+In this first tutorial you will learn how to read and write image files and how images are represented in NICE.
|
|
|
|
+
|
|
|
|
+## Prerequisites
|
|
|
|
+If you need support for a specific image file format other than PGM/PPM, you have to compile nice-core yourself and add the necessary libraries and CMake flags.
|
|
|
|
+
|
|
|
|
+The sample code for this tutorial does not have any dependencies other than nice-core. You can find it in the tutorial/progs subfolder.
|
|
|
|
+
|
|
|
|
+## Images in memory
|
|
|
|
+NICE provides a common generic interface for grayscale and multi-channel images. The corresponding classes are _ImageT_ and _ColorImageT_, both subclasses of _GrayColorImageCommonImplementationT_ which contains the most basic image access methods. Those are used by many of the other modules. You can find typical use cases in the next tutorials.
|
|
|
|
+
|
|
|
|
+## Image files
|
|
|
|
+In NICE, instances of _ImageT_ or _ColorImageT_ do not have to exist on disk. Files are different, completely independent objects. The _ImageFile_ class serves as a pointer to a file in the file system.
|
|
|
|
+
|
|
|
|
+An instance of _ImageFile_ can be read from or written to, but it does not modify the file in any way unless you call those methods.
|
|
|
|
+
|
|
|
|
+Constructing an _ImageFile_ is simple:
|
|
|
|
+
|
|
|
|
+```c++
|
|
|
|
+ImageFile file("path/to/file.pgm");
|
|
|
|
+```
|
|
|
|
+
|
|
|
|
+This does not touch the file at all and it doesn't need to exist. If it does exist, you can read the image file into memory like this:
|
|
|
|
+
|
|
|
|
+```c++
|
|
|
|
+Image image_in_memory;
|
|
|
|
+file.reader(&image_in_memory);
|
|
|
|
+```
|
|
|
|
+
|
|
|
|
+After making our changes to the image (in memory), we can write them to the file:
|
|
|
|
+```c++
|
|
|
|
+file.writer(&image_in_memory);
|
|
|
|
+```
|
|
|
|
+
|
|
|
|
+## Header information
|
|
|
|
+Sometimes it can be useful to access metadata without reading the whole image into memory. _ImageFile_ provides the __getHeader__ method for this. It reads the file and returns an instance of _Header_ with the fields __width__, __height__, __bitdepth__, __channel__.
|
|
|
|
+
|
|
|
|
+## Formats
|
|
|
|
+Note that _ImageFile_ attemtps to determine the file format by looking at the file name. You can override this behaviour by providing the __type__ parameter using the _Format_ enumeration.
|
|
|
|
+
|
|
|
|
+Supported file formats include PGM/PPM out of the box and those provided by libpng, libjpeg and libimagemagick++.
|