C++ में इमेज प्रोसेसिंग: लाइब्रेरी और व्यावहारिक उदाहरण
इमेज प्रोसेसिंग आधुनिक प्रोग्रामिंग का एक महत्वपूर्ण हिस्सा है, चाहे वह कंप्यूटर विज़न हो या ग्राफ़िक्स एडिटर। C++ में कई शक्तिशाली लाइब्रेरी हैं जो इमेज को लोड, प्रोसेस और सेव करने में मदद करती हैं। इस लेख में हम तीन लोकप्रिय टूल्स के बारे में जानेंगे: CImg, OpenCV और stb_image। हर एक की अपनी खासियत, फायदे और उपयोग के क्षेत्र हैं।
1. CImg लाइब्रेरी
CImg (C++ Image Processing Library) एक हल्की और क्रॉस-प्लेटफ़ॉर्म लाइब्रेरी है। यह एक ही हेडर फ़ाइल (CImg.h) में आती है, जो इसे तेज़ प्रोटोटाइप और छोटे प्रोजेक्ट्स के लिए आदर्श बनाती है। CImg BMP, JPEG, PNG, TIFF जैसे फ़ॉर्मेट सपोर्ट करती है, लेकिन इनके लिए अतिरिक्त लाइब्रेरी (जैसे libpng या libjpeg) की ज़रूरत होती है।
मुख्य विशेषताएँ:
- इमेज लोड, डिस्प्ले और सेव करना।
- फ़िल्टर (ब्लर, शार्पन, मीडियन फ़िल्टर)।
- ज्यामितीय बदलाव (रोटेट, स्केल, फ़्लिप)।
- कलर स्पेस (RGB, HSV, Lab) के साथ काम करना।
- प्रिमिटिव ड्रॉइंग (लाइन, सर्कल, टेक्स्ट)।
उदाहरण: इमेज लोड करना और ब्लर लगाना
#include "CImg.h"
using namespace cimg_library;
int main() {
// इमेज लोड करें
CImg<unsigned char> image("input.jpg");
// गॉसियन ब्लर लगाएं (रेडियस 3)
CImg<unsigned char> blurred = image.get_blur(3);
// रिज़ल्ट सेव करें
blurred.save("output_blurred.jpg");
return 0;
}
यह कोड CImg का मिनिमलिस्टिक अप्रोच दिखाता है: एक लाइन लोड करने के लिए, एक प्रोसेस करने के लिए और एक सेव करने के लिए। लाइब्रेरी मेमोरी को अपने आप मैनेज करती है।
2. OpenCV लाइब्रेरी
OpenCV (Open Source Computer Vision Library) C++ में कंप्यूटर विज़न और इमेज प्रोसेसिंग का डी-फ़ैक्टो स्टैंडर्ड है। इसमें 2500 से अधिक ऑप्टिमाइज़्ड एल्गोरिदम हैं, GPU एक्सेलेरेशन सपोर्ट करती है, और उद्योग, रोबोटिक्स और रिसर्च में व्यापक रूप से उपयोग होती है। OpenCV JPEG, PNG, TIFF, WebP और कई अन्य फ़ॉर्मेट सपोर्ट करती है।
मुख्य विशेषताएँ:
- इमेज/वीडियो लोड, डिस्प्ले और रिकॉर्ड करना।
- फ़िल्टरिंग, मॉर्फोलॉजी, थ्रेशोल्डिंग।
- हार कैस्केड या डीप लर्निंग से ऑब्जेक्ट डिटेक्शन (चेहरे, गाड़ियाँ)।
- कैमरा कैलिब्रेशन, स्टीरियो विज़न।
- मशीन लर्निंग (SVM, KNN, न्यूरल नेटवर्क)।
उदाहरण: साइज़ बदलना और ग्रेस्केल में बदलना
#include <opencv2/opencv.hpp>
using namespace cv;
int main() {
// कलर इमेज लोड करें
Mat image = imread("input.jpg", IMREAD_COLOR);
if (image.empty()) {
return -1;
}
// ग्रेस्केल में बदलें
Mat gray;
cvtColor(image, gray, COLOR_BGR2GRAY);
// साइज़ आधा करें
Mat resized;
resize(gray, resized, Size(), 0.5, 0.5, INTER_LINEAR);
// रिज़ल्ट सेव करें
imwrite("output_gray_resized.jpg", resized);
return 0;
}
OpenCV इमेज को दर्शाने के लिए Mat क्लास का उपयोग करती है। सभी ऑपरेशन स्टैटिक फ़ंक्शन या मेथड के ज़रिए होते हैं। लाइब्रेरी को पहले इंस्टॉल करना पड़ता है, लेकिन यह अधिकतम लचीलापन और परफ़ॉर्मेंस देती है।
3. stb_image लाइब्रेरी
stb_image Sean Barrett द्वारा बनाई गई सिंगल-हेडर लाइब्रेरी का हिस्सा है। यह केवल इमेज लोड और सेव करने के लिए है, प्रोसेसिंग के लिए नहीं। यह JPEG, PNG, BMP, GIF, PSD और अन्य फ़ॉर्मेट सपोर्ट करती है। इसका सबसे बड़ा फायदा है अविश्वसनीय रूप से आसान इंटीग्रेशन: बस एक हेडर फ़ाइल को शामिल करें और काम शुरू करें।