C++ में छवियों के साथ कार्य: CImg और STB Image लाइब्रेरी
छवि प्रसंस्करण कंप्यूटर ग्राफिक्स, कंप्यूटर विज़न और वेब तकनीकों में प्रमुख कार्यों में से एक है। C++ में रास्टर छवियों के साथ काम करने के लिए कोई अंतर्निहित साधन नहीं हैं, लेकिन कई तृतीय-पक्ष लाइब्रेरी मौजूद हैं। इस लेख में हम दो लोकप्रिय और उपयोग में आसान लाइब्रेरी देखेंगे: CImg (उच्च-स्तरीय प्रसंस्करण के लिए) और STB Image (लोकप्रिय प्रारूपों को तेज़ी से लोड/सेव करने के लिए)।
1. CImg: छवि प्रसंस्करण के लिए सार्वभौमिक लाइब्रेरी
CImg (C++ Template Image Processing Library) एक हेडर-ओनली लाइब्रेरी है जो छवियों को लोड करने, प्रदर्शित करने, फ़िल्टर करने और विश्लेषण करने के लिए कार्यों की एक विस्तृत श्रृंखला प्रदान करती है। यह BMP, JPEG, PNG, TIFF और अन्य प्रारूपों को सपोर्ट करती है (अतिरिक्त लाइब्रेरी जैसे libpng, libjpeg की उपस्थिति में)।
स्थापना और कनेक्शन
आधिकारिक वेबसाइट से नवीनतम संस्करण डाउनलोड करें। फिर बस हेडर फ़ाइल को शामिल करें:
#include "CImg.h"using namespace cimg_library;CImg के साथ मुख्य संचालन
लोडिंग, आकार बदलना और गॉसियन फ़िल्टर लगाना देखें:
#include "CImg.h"#include <iostream>
int main() { // छवि लोड करना (BMP, JPG, PNG और अन्य सपोर्टेड हैं) CImg<unsigned char> img("input.jpg"); // आकार बदलकर 400x300 करना CImg<unsigned char> resized = img.resize(400, 300); // गॉसियन ब्लर लगाना (त्रिज्या 3) CImg<unsigned char> blurred = resized.get_blur(3.0f); // परिणाम सेव करना blurred.save("output.jpg"); std::cout << "छवि संसाधित हो गई!" << std::endl; return 0;}CImg की अतिरिक्त क्षमताएँ
- फ़िल्टर: ब्लर, शार्पनिंग, मीडियन फ़िल्टर, मॉर्फोलॉजिकल ऑपरेशन।
- रंग रूपांतरण: ग्रेस्केल, HSV, Lab में रूपांतरण।
- हिस्टोग्राम: निर्माण और समीकरण।
- ड्राइंग: छवि पर रेखाएँ, वृत्त, टेक्स्ट।
- प्रदर्शन: देखने के लिए अंतर्निहित विंडो (Linux पर X11 या Windows पर WinAPI की आवश्यकता है)।
2. STB Image: तेज़ लोडिंग और सेविंग
STB Image Sean Barrett द्वारा एकल-हेडर लाइब्रेरी का एक सेट है, जो PNG, JPG, BMP, GIF और अन्य प्रारूपों में छवियों को पढ़ने/लिखने के लिए डिज़ाइन किया गया है। मुख्य लाभ न्यूनतमता और गति है। इसे स्थापित करने की आवश्यकता नहीं है, बस stb_image.h और stb_image_write.h फ़ाइलों को शामिल करें।
कनेक्शन
GitHub से फ़ाइलें डाउनलोड करें। उपयोग के लिए, ठीक एक .cpp फ़ाइल में मैक्रो STB_IMAGE_IMPLEMENTATION को परिभाषित करें:
#define STB_IMAGE_IMPLEMENTATION#include "stb_image.h"
#define STB_IMAGE_WRITE_IMPLEMENTATION#include "stb_image_write.h"उदाहरण: PNG लोड करना और JPG में सेव करना
#include <iostream>
#define STB_IMAGE_IMPLEMENTATION#include "stb_image.h"#define STB_IMAGE_WRITE_IMPLEMENTATION#include "stb_image_write.h"
int main() { int width, height, channels; // छवि लोड करना (RGB/RGBA प्रारूप में पिक्सेल ऐरे लौटाता है) unsigned char* img = stbi_load("input.png", &width, &height, &channels, 3); if (!img) { std::cerr << "छवि लोड करने में त्रुटि!" << std::endl; return -1; } // गुणवत्ता 90 के साथ JPEG के रूप में सेव करना stbi_write_jpg("output.jpg", width, height, 3, img, 90); // मेमोरी मुक्त करना stbi_image_free(img); std::cout << "रूपांतरण पूर्ण!" << std::endl; return 0;