Επεξεργασία και μετατροπή εικόνας μέσω API ανοιχτού κώδικα C++

Διαβάστε, γράψτε και μετατρέψτε δημοφιλείς μορφές εικόνας όπως PNG, JPEG, BMP, TIFF και πολλά άλλα μέσω της Δωρεάν βιβλιοθήκης C++.

Το OpenImageIO είναι μια ισχυρή βιβλιοθήκη επεξεργασίας εικόνας που δίνει στους προγραμματιστές λογισμικού τη δυνατότητα να διαβάζουν, να γράφουν και να επεξεργάζονται δημοφιλείς μορφές αρχείων εικόνας μέσα σε C++ εφαρμογές. Παρέχει υποστήριξη για διάφορες δημοφιλείς μορφές εικόνας μέσω plugins. Παρέχει υποστήριξη για δημοφιλείς μορφές εικόνας όπως OpenEXR, TIFF, JPEG / FF, NG, BMP, JPEG-2000, CO, PM, DP, FF, Fosh3D,

Η βιβλιοθήκη OpenImageIO χρησιμοποιείται ευρέως σε κινούμενα σχέδια και στούντιο FX σε όλο τον κόσμο και ενσωματώνεται σε πολλά εμπορικά προϊόντα. Η βιβλιοθήκη OpenImageIO διαθέτει πολλά εργαλεία εικόνας που δείχνουν χαρακτηριστικά όπως η μετατροπή των μορφών εικόνας σε άλλους, συγκρίνοντας δύο εικόνες, εκτυπώνοντας λεπτομερείς πληροφορίες, αναζητώντας εικόνες για μεταδεδομένα αντιστοίχισης, απλός θεατής εικόνας και πολλά άλλα.

Previous Next

Ξεκινώντας με το OpenImageIO

Το σύστημα δημιουργίας OpenImageIO βασίζεται στο CMake. Εάν χρειάζεται, εγκαταστήστε το στο σύστημά σας. Αφού δημιουργήσετε το OpenImageIO, εάν κάνετε μεταγλώττιση με τη σημαία EMBEDPLUGINS=0, θα χρειαστεί να ορίσετε τη μεταβλητή περιβάλλοντος OIIO_LIBRARY_PATH ώστε να δείχνει στον κατάλογο 'lib' όπου είναι εγκατεστημένο το OpenImageIO, διαφορετικά δεν θα μπορεί να βρει τα πρόσθετα.

Εγκαταστήστε το OpenImageIO μέσω εντολής git

 git clone https://github.com/OpenImageIO/oiio.git 

Ανάγνωση και εγγραφή εικόνων μέσω C++ API

Η βιβλιοθήκη OpenImageIO επιτρέπει στους προγραμματιστές να διαβάζουν και να γράφουν εικόνες καθώς και να ελέγχουν τον τρόπο με τον οποίο οι μεταγενέστερες εικόνες θα παράγονται εξωτερικά στην έξοδο. Κανονικά, όλες οι εικόνες που διαβάζονται από τη βιβλιοθήκη διαβάζονται σε ένα ImageBuf που υποστηρίζεται από μια υποκείμενη ImageCache και μετατρέπονται αυτόματα σε αιωρούμενα pixel για εσωτερική αποθήκευση. Κατά τη σύνταξη εικόνων, απλώς εξάγει την τρέχουσα εικόνα στο αρχείο με το όνομα. Η βιβλιοθήκη επεξεργασίας εικόνας δεν αφαιρεί την παρούσα εικόνα από τη στοίβα εικόνων. αποθηκεύει απλώς ένα αντίγραφό του.

Προχωρημένη ανάγνωση εικόνων μέσω C++ API

#include 
using namespace OIIO;
...
const char *filename = "foo.jpg";
auto inp = ImageInput::open (filename);
if (! inp) {
    std::cerr << "Could not open " << filename
              << ", error = " << OIIO::geterror() << "\n";
    return;
}
const ImageSpec &spec = inp->spec();
int xres = spec.width;
int yres = spec.height;
int channels = spec.nchannels;
std::vector pixels(xres * yres * channels);
if (! inp->read_image (TypeDesc::UINT8, &pixels[0])) {
    std::cerr << "Could not read pixels from " << filename
              << ", error = " << inp->geterror() << "\n";
    return;
}
if (! inp->close ()) {
    std::cerr << "Error closing " << filename
              << ", error = " << inp->geterror() << "\n";
    return;
}

Μετατροπή εικόνας σε άλλες μορφές

Η βιβλιοθήκη OpenImageIO παρέχει δυνατότητες για τη μετατροπή εικόνων σε άλλες δημοφιλείς μορφές αρχείων. Είναι πολύ εύκολο να μετατραπεί μεταξύ των υποστηριζόμενων μορφών εικόνας. Το βοηθητικό πρόγραμμα iconvert θα διαβάσει μια εικόνα και στη συνέχεια θα γράψει την εικόνα σε μια νέα υποστηριζόμενη μορφή αρχείου. Απλώς θα συμπεράνει τη μορφή αρχείου από την επέκταση αρχείου. Μπορείτε να συμπεριλάβετε λεζάντα εικόνας, περιγραφή, λέξεις-κλειδιά ή μεταδεδομένα.

Αλλαγή Μεταδεδομένων Εικόνας μέσω C++

Το OpenImageIO API επιτρέπει στους προγραμματιστές λογισμικού να αλλάζουν τα σημερινά μεταδεδομένα εικόνας μέσα στις δικές τους C++ εφαρμογές μέσω ανοιχτού κώδικα API. Παρέχει εντολές που τροποποιούν τα μεταδεδομένα της υπάρχουσας εικόνας, αλλά δεν αλλάζουν τις τιμές pixel. Το καλό είναι ότι μόνο η τρέχουσα εικόνα (εικόνα στην κορυφή της στοίβας) επηρεάζεται, αλλά όχι κάτω από τη στοίβα. Μπορείτε επίσης να προσθέσετε ή να καθαρίσετε λέξεις-κλειδιά, να προσθέσετε λεζάντα ή περιγραφή, να καταργήσετε οποιαδήποτε μεταδεδομένα και πολλά άλλα.

Πώς να ορίσετε την εικόνα Metadata μέσω C++

// spec["key"] = value  sets the value of the metadata, using
// the type of value as a guide for the type of the metadata.
spec["Orientation"] = 1;   // int
spec["PixelAspectRatio"] = 1.0f;   // float
spec["ImageDescription"] = "selfie";  // string
spec["worldtocamera"] = Imath::M44f(...)  // matrix

Σχήμα ή κείμενο πάνω από εικόνες μέσω C++ API

Είναι πάντα πολύ χρήσιμο να επισημαίνετε τις εικόνες σας με χρήσιμους τίτλους ή υδατογράφημα την εικόνα για την προστασία τους από μη εξουσιοδοτημένη χρήση. Η βιβλιοθήκη OpenImageIO έχει συμπεριλάβει αρκετά σημαντικά χαρακτηριστικά για να σχεδιάσει σχήματα, σημεία, γραμμές, κουτιά ή κείμενο πάνω από τις εικόνες με ευκολία. Μπορείτε να σχεδιάσετε σχήματα πάνω από την εικόνα σας ή να προσθέσετε κείμενο σε αυτήν με μόνο μερικές γραμμές κώδικα. Τα παρακάτω παραδείγματα κώδικα δείχνουν πώς να σχεδιάσετε κείμενο πάνω από μια εικόνα και να την ευθυγραμμίσετε.

Πώς να τραβήξετε κείμενο πάνω από την εικόνα μέσω C++ API

ImageBufAlgo::render_text (ImgA, 50, 100, "Hello, world");
float red[] = { 1, 0, 0, 1 };
ImageBufAlgo::render_text (ImgA, 100, 200, "Go Big Red!",
                           60, "Arial Bold", red);
float white[] = { 1, 1, 1, 1 };
ImageBufAlgo::render_text (ImgB, 320, 240, "Centered",
                           60, "Arial Bold", white,
                           TextAlignX::Center, TextAlignY::Center);
 Ελληνικά