ओपन सोर्स सी ++ एपीआई के माध्यम से इमेज प्रोसेसिंग और रूपांतरण
मुफ्त सी++ लाइब्रेरी के माध्यम से पीएनजी, जेपीईजी, बीएमपी, टीआईएफएफ और कई अन्य लोकप्रिय छवि प्रारूपों को पढ़ें, लिखें और कनवर्ट करें।
OpenImageIO एक शक्तिशाली इमेज प्रोसेसिंग लाइब्रेरी है जो सॉफ्टवेयर डेवलपर्स को C++ एप्लिकेशन के अंदर लोकप्रिय इमेज फाइल फॉर्मेट को पढ़ने, लिखने और प्रोसेस करने की क्षमता देती है। यह प्लगइन्स के माध्यम से कई लोकप्रिय छवि प्रारूपों के लिए समर्थन प्रदान करता है। यह OpenEXR, TIFF, JPEG/JFIF, PNG, BMP, JPEG-2000, ICO, PNM, DPX, IFF, Field3D, Ptex, Photoshop PSD, GIF और कई अन्य जैसे लोकप्रिय छवि प्रारूपों के लिए समर्थन प्रदान करता है।
OpenImageIO पुस्तकालय व्यापक रूप से दुनिया भर में एनीमेशन और वीएफएक्स स्टूडियो में उपयोग किया जाता है और इसे कई वाणिज्यिक उत्पादों में भी एकीकृत किया जाता है। OpenImageIO लाइब्रेरी कई कमांड-लाइन छवि टूल के साथ आती है जो छवि प्रारूपों को दूसरों में परिवर्तित करने, दो छवियों की तुलना करने, विस्तृत जानकारी प्रिंट करने, मैच मेटाडेटा के लिए छवियों की खोज करने, सरल छवि दर्शक, और बहुत कुछ प्रदर्शित करती है।
OpenImageIO के साथ शुरुआत करना
OpenImageIO बिल्ड सिस्टम CMake पर आधारित है। यदि इसे अपने सिस्टम पर स्थापित करने की आवश्यकता है। OpenImageIO बनाने के बाद, यदि आपने EMBEDPLUGINS = 0 ध्वज के साथ संकलित किया है, तो आपको 'lib' निर्देशिका को इंगित करने के लिए पर्यावरण चर OIIO_LIBRARY_PATH सेट करने की आवश्यकता होगी जहां OpenImageIO स्थापित है, अन्यथा यह प्लगइन्स नहीं ढूंढ पाएगा।
OpenImageIO को git कमांड के माध्यम से स्थापित करें
git clone https://github.com/OpenImageIO/oiio.git
सी ++ एपीआई के माध्यम से छवियों को पढ़ना और लिखना
OpenImageIO पुस्तकालय प्रोग्रामर को छवियों को पढ़ने और लिखने के साथ-साथ उस तरीके को नियंत्रित करने की अनुमति देता है जिससे बाद की छवियों को आउटपुट में बाहरी रूप से उत्पादित किया जाएगा। आम तौर पर, लाइब्रेरी द्वारा पढ़ी गई सभी छवियों को एक अंतर्निहित ImageCache द्वारा समर्थित एक ImageBuf में पढ़ा जाता है, और आंतरिक भंडारण के लिए स्वचालित रूप से फ्लोट पिक्सल में परिवर्तित हो जाता है। छवियों को लिखते समय, यह वर्तमान छवि को नामित फ़ाइल में आउटपुट करता है। इमेज प्रोसेसिंग लाइब्रेरी इमेज स्टैक से वर्तमान इमेज को नहीं हटाती है; यह बस इसकी एक प्रति सहेजता है।
उन्नत छवि पढ़ने के माध्यम से 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 लाइब्रेरी छवियों को अन्य लोकप्रिय फ़ाइल स्वरूपों में परिवर्तित करने के लिए सुविधाएँ प्रदान करती है। समर्थित छवि प्रारूपों में कनवर्ट करना बहुत आसान है। आइकनवर्ट यूटिलिटी एक छवि को पढ़ेगा और फिर छवि को एक नए समर्थित फ़ाइल प्रारूप में लिखेगा। यह केवल फ़ाइल एक्सटेंशन से फ़ाइल स्वरूप का अनुमान लगाएगा। आप एक छवि कैप्शन, विवरण, कीवर्ड या मेटाडेटा शामिल कर सकते हैं।
सी ++ के माध्यम से छवि मेटाडेटा बदलें
ओपनइमेजियो एपीआई सॉफ्टवेयर डेवलपर्स को ओपन सोर्स एपीआई के माध्यम से अपने स्वयं के सी ++ अनुप्रयोगों के अंदर वर्तमान छवि मेटाडेटा को बदलने में सक्षम बनाता है। यह कमांड प्रदान करता है जो मौजूदा छवि के मेटाडेटा को संशोधित करता है, लेकिन इसके पिक्सेल मानों को नहीं बदलता है। अच्छी बात यह है कि केवल वर्तमान छवि (स्टैक के शीर्ष पर छवि) प्रभावित होती है, लेकिन स्टैक के नीचे नहीं। आप कीवर्ड जोड़ या साफ़ कर सकते हैं, कैप्शन या विवरण जोड़ सकते हैं, किसी भी मेटाडेटा को हटा सकते हैं, और बहुत कुछ कर सकते हैं।
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 के माध्यम से छवियों पर आकृतियाँ या पाठ खींचें
यह हमेशा उपयोगी शीर्षकों के साथ अपनी छवियों को लेबल करने या उन्हें अनधिकृत उपयोग से बचाने के लिए छवि को वॉटरमार्क करने के लिए बहुत उपयोगी होता है। ओपन सोर्स ओपनImageIO पुस्तकालय में आसानी से छवियों पर आकार, अंक, रेखाएं, बक्से या पाठ ड्राइंग के लिए कई महत्वपूर्ण विशेषताएं शामिल हैं। आप अपनी छवि पर आकृतियाँ खींच सकते हैं या कोड की कुछ लाइनों के साथ इसमें टेक्स्ट जोड़ सकते हैं। निम्नलिखित कोड उदाहरणों से पता चलता है कि कैसे एक छवि पर पाठ खींचना है और इसे संरेखित करना है।
सी ++ एपीआई के माध्यम से टेक्स्ट ओवर इमेज कैसे ड्रा करें
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);