Boost.GIL
Γενική βιβλιοθήκη εικόνων ανοιχτού κώδικα C++
C++ API που αφαιρεί αναπαραστάσεις εικόνων από αλγόριθμους και υποστηρίζει την εργασία με απλές και σύνθετες εικόνες. Δημιουργήστε ένα Ιστόγραμμα, υπολογίστε διαβαθμίσεις εικόνας, συνέλιξη και επαναδειγματοληψία, και ούτω καθεξής.
Οι εικόνες είναι το θεμελιώδες μέρος πολλών έργων που σχετίζονται με γραφικά, ψηφιακά βίντεο, όραση υπολογιστή και επεξεργασία εικόνων. Επιπλέον, οι εικόνες μπορούν να αναπαρασταθούν με πολλούς διαφορετικούς τρόπους (χρωματικός χώρος, βάθος bit, τάξη καναλιών, πολιτική ευθυγράμμισης κ.λπ.). Έτσι, η εργασία σε ένα νέο έργο που σχετίζεται με την εικόνα που μπορεί να είναι γενική και αποτελεσματική είναι πολύ δύσκολη. Το Boost Generic Image Library (IL) είναι μια βιβλιοθήκη ανοιχτού κώδικα που δίνει στους προγραμματιστές τη δυνατότητα να εργάζονται με απλές και σύνθετες εικόνες μέσα στις δικές τους C++ εφαρμογές.
Το μεγάλο πράγμα σχετικά με τη βιβλιοθήκη Boost.IL είναι ότι αφαιρεί απεικονίσεις εικόνων από αλγορίθμους και επιτρέπει τη γραφή κώδικα που μπορεί να λειτουργήσει σε μια ποικιλία εικόνων με απόδοση συγκρίσιμη με τη γραφή ενός συγκεκριμένου τύπου εικόνας. Έτσι κάνει τις θέσεις εργασίας του προγραμματιστή εύκολο, επιτρέποντάς του να γράψει έναν κώδικα μία φορά και να τον κάνει να λειτουργεί για κάθε τύπο εικόνας.
Η βιβλιοθήκη Boost.IL έχει σχεδιαστεί ως φιλοφρόνηση TL και Boost. Μια άλλη σημαντική πτυχή της βιβλιοθήκης είναι η ταχύτητα και η ευελιξία. Η ταχύτητα αποτελεί βασικό μέρος του σχεδιασμού της βιβλιοθήκης. Μπορείτε εύκολα να ορίσετε οποιαδήποτε παράμετρο εικόνας σε χρόνο λειτουργίας για ένα πολύ μικρό κόστος απόδοσης σε σύγκριση με πολλές άλλες βιβλιοθήκες. Παρέχει υποστήριξη για πολλά σημαντικά χαρακτηριστικά, όπως τα μη ευθυγραμμισμένα pixels, τις βαθμολογίες υπολογιστικής εικόνας, την ενσωμάτωση των Boots, την αποστολή ενός καναλιού σε ένα γκρίζο pixel, την παρηγοριά και τη δειγματολη.
Ξεκινώντας με το Boost.GIL
Ο ευκολότερος τρόπος εγκατάστασης του Boost.GIL είναι χρησιμοποιώντας το GitHub. Χρησιμοποιήστε την ακόλουθη εντολή για ομαλή εγκατάσταση
Εγκαταστήστε το Boost.GILvia GitHub.
git clone --https://github.com/boostorg/gil
Ανάγνωση και γραφή εικόνων
Το ιστόγραμμα είναι η γραφική αναπαράσταση της τονικής κατανομής σε μια ψηφιακή εικόνα. Στο πλαίσιο επεξεργασίας εικόνας, το ιστόγραμμα μιας εικόνας συνήθως αναφέρεται σε ένα ιστόγραμμα των τιμών της έντασης των εικονοστοιχείων. Η βιβλιοθήκη Boost.GIL επιτρέπει στους προγραμματιστές λογισμικού να δημιουργήσουν ένα ιστόγραμμα μέσα στη δική τους εφαρμογή χρησιμοποιώντας κώδικα C++. Μπορεί να δημιουργηθεί μετρώντας τον αριθμό των τιμών pixel που εμπίπτουν σε κάθε bin. Μπορείτε επίσης να υπολογίσετε το ιστόγραμμα φωτεινότητας της εικόνας με ευκολία.
Εικόνα C++ API
#define png_infopp_NULL (png_infopp)NULL
#define int_p_NULL (int*)NULL
#include
#include
using namespace boost::gil;
int main()
{
rgb8_image_t img(512, 512);
rgb8_pixel_t red(255, 0, 0);
fill_pixels(view(img), red);
png_write_view("redsquare.png", const_view(img));
}
Λειτουργίες εικόνας σε επίπεδο pixel με χρήση API C++
Η βιβλιοθήκη ανοιχτού κώδικα Boost.IL έχει παράσχει πλήρη υποστήριξη για λειτουργίες εικόνας σε επίπεδο pixel μέσα στις δικές τους C++ εφαρμογές. Η βιβλιοθήκη έχει συμπεριλάβει μερικές χρήσιμες λειτουργίες που επιτρέπουν στους χρήστες να χειρίζονται τιμές pixel, pixel pointers και pixel αναφορές, όπως να κάνουν ένα pixel χρωματιστό, πρόσβαση σε ένα κανάλι, συγκρίνοντας τα δύο κανάλια.
Μετατροπή Χώρου Χρώματος σε Grayscale μέσω C++
template
void x_luminosity_gradient(SrcView const& src, DstView const& dst)
{
using gray_pixel_t = pixel::type, gray_layout_t>;
x_gradient(color_converted_view(src), dst);
}
Μετατροπή εικόνων μέσα σε C++ εφαρμογές
Η βιβλιοθήκη Boost.IL δίνει στους προγραμματιστές τη δυνατότητα να περιστρέψουν τις εικόνες με λίγες γραμμές κώδικα. Το Boost.IL υποστηρίζει μια ποικιλία λειτουργιών μετασχηματισμού εικόνας που μπορούν να εκτελέσουν οποιαδήποτε περιστροφή με άξονα, να γυρίσουν κάθετα ή οριζόντια, να εξάγουν μια ορθογώνια υπο-εικόνα, να εφαρμόσουν χρώματα.
Μετατροπή εικόνων μέσω C++ API
template
void y_gradient(const SrcView& src, const DstView& dst) {
x_gradient(rotated90ccw_view(src), rotated90ccw_view(dst));
}