छवियों के साथ कार्य: C++ और OpenCV के साथ resize और crop

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

छवियों के साथ कार्य: C++ में resize और crop

आधुनिक कंप्यूटर ग्राफिक्स और कंप्यूटर विज़न में, छवियों का आकार बदलने (resize) और क्रॉप करने (crop) के संचालन मौलिक हैं। चाहे आप फोटो प्रोसेसिंग एप्लिकेशन विकसित कर रहे हों, फेस रिकॉग्निशन सिस्टम बना रहे हों, या बस न्यूरल नेटवर्क के लिए छवियां तैयार करना चाहते हों — इन कार्यों के बिना काम नहीं चल सकता। इस लेख में, हम विस्तार से देखेंगे कि शक्तिशाली लाइब्रेरी OpenCV का उपयोग करके C++ भाषा में resize और crop कैसे करें।



OpenCV क्यों?

OpenCV (ओपन सोर्स कंप्यूटर विज़न लाइब्रेरी) कंप्यूटर विज़न कार्यों के लिए डी-फैक्टो मानक है। यह C/C++ में लिखी गई है और सैकड़ों अनुकूलित एल्गोरिदम प्रदान करती है। resize और crop के साथ काम करने के लिए हमें केवल कुछ फ़ंक्शन की आवश्यकता होगी, लेकिन उनका प्रदर्शन और लचीलापन OpenCV को एक आदर्श विकल्प बनाता है।

OpenCV को पैकेज मैनेजर (उदाहरण के लिए, vcpkg install opencv या brew install opencv) के माध्यम से या स्रोत से संकलित करके स्थापित किया जा सकता है। स्थापना विवरण इस लेख के दायरे से बाहर हैं, लेकिन यह माना जाता है कि आपके पास लाइब्रेरी से जुड़ा एक प्रोजेक्ट पहले से सेटअप है।



तैयारी: छवि लोड करना

कुछ भी बदलने से पहले, छवि को लोड करना होगा। OpenCV में यह imread() फ़ंक्शन के साथ किया जाता है:

#include <opencv2/opencv.hpp>#include <iostream>

using namespace cv;using namespace std;

int main() { // छवि लोड करें Mat image = imread("input.jpg"); if (image.empty()) { cerr << "छवि लोड करने में त्रुटि!" << endl; return -1; } cout << "मूल छवि का आकार: " << image.cols << " x " << image.rows << endl; return 0;}

फ़ंक्शन Mat (मैट्रिक्स) प्रकार की एक वस्तु लौटाता है। यदि फ़ाइल नहीं मिलती है या दूषित है, तो image.empty() true लौटाएगा।



C++ में छवि का आकार बदलना (resize)

OpenCV में resize() फ़ंक्शन आपको छवि को मनमाने आकार में स्केल करने की अनुमति देता है। यह कई इंटरपोलेशन विधियों का समर्थन करता है जो परिणाम की गुणवत्ता को प्रभावित करते हैं।



resize का सिंटैक्स

void resize(InputArray src, OutputArray dst, Size dsize,             double fx = 0, double fy = 0, int interpolation = INTER_LINEAR);
  • src — मूल छवि।
  • dst — परिणामी छवि।
  • dsize — नया आकार (चौड़ाई, ऊंचाई)। इसे स्पष्ट रूप से सेट किया जा सकता है या fx और fy के माध्यम से गणना की जा सकती है।
  • fx — चौड़ाई के लिए स्केल फैक्टर (यदि dsize = Size() है)।
  • fy — ऊंचाई के लिए स्केल फैक्टर।
  • interpolation — इंटरपोलेशन विधि। मुख्य विकल्प:
    • INTER_NEAREST — निकटतम पड़ोसी (तेज़, लेकिन कलाकृतियों के साथ)।
    • INTER_LINEAR — बाइलिनियर (डिफ़ॉल्ट, अच्छा संतुलन)।
    • INTER_CUBIC — बाइक्यूबिक (धीमा, लेकिन अधिक गुणवत्ता)।
    • INTER_AREA — छवि को छोटा करते समय उपयोग किया जाता है (पिक्सेल क्षेत्र)।


उदाहरण 1: निश्चित आकार में छोटा करना

Mat resized;Size newSize(300, 200); // चौड़ाई 300, ऊंचाई 200resize(image, resized, newSize, 0, 0, INTER_AREA);imwrite("resized_fixed.jpg", resized);cout << "resize के बाद आकार: " << resized.cols << " x " << resized.rows << endl;


उदाहरण 2: अनुपात बनाए रखते हुए 2 गुना स्केल करना

Mat scaled;resize(image, scaled, Size(), 0.5, 0.5, INTER_LINEAR);imwrite("scaled_half.jpg", scaled);

यदि dsize = Size() निर्दिष्ट किया जाता है, तो नए आकार की गणना सूत्रों द्वारा की जाती है: dsiz

अनुशंसाएँ