C++ में OpenCV से इमेज प्रोसेसिंग: resize और crop करना सीखें

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

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

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

C++ में OpenCV के साथ इमेज प्रोसेसिंग: resize और crop

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

OpenCV लाइब्रेरी — C++ में इमेज प्रोसेसिंग का डी-फैक्टो मानक

OpenCV (Open Source Computer Vision Library) एक क्रॉस-प्लेटफ़ॉर्म ओपन-सोर्स लाइब्रेरी है जिसमें इमेज और वीडियो प्रोसेसिंग के लिए सैकड़ों ऑप्टिमाइज़्ड एल्गोरिदम शामिल हैं। यह C++ में लिखी गई है और इसके Python, Java और अन्य भाषाओं के लिए बाइंडिंग उपलब्ध हैं। C++ के लिए, OpenCV सबसे अधिक प्रदर्शनशील और कार्यात्मक समाधान है।

resize और crop कार्यों के लिए OpenCV के मुख्य लाभ:

  • उच्च गति — सभी फंक्शन SIMD निर्देशों और मल्टीथ्रेडिंग का उपयोग करते हैं।
  • लचीलापन — विभिन्न इंटरपोलेशन विधियों (बिलिनियर, बाइक्यूबिक, लैंज़ोश विधि आदि) का समर्थन।
  • सुविधा — cv::Mat क्लास के माध्यम से इमेज के साथ काम करना, जो स्वचालित रूप से मेमोरी प्रबंधित करता है।

C++ के लिए OpenCV स्थापित करना

शुरू करने के लिए, लाइब्रेरी को स्थापित करना आवश्यक है। सबसे सामान्य तरीका vcpkg पैकेज मैनेजर के माध्यम से या स्रोत कोड से बिल्ड करना है। vcpkg के माध्यम से स्थापना का उदाहरण:

git clone https://github.com/Microsoft/vcpkg.git
cd vcpkg
./bootstrap-vcpkg.sh
./vcpkg install opencv4

स्थापना के बाद, अपनी CMakeLists.txt फ़ाइल में लाइब्रेरी को लिंक करें:

find_package(OpenCV REQUIRED)
target_link_libraries(your_project ${OpenCV_LIBS})

इमेज का आकार बदलना (resize)

cv::resize() फंक्शन मूल इमेज के आयामों को निर्दिष्ट चौड़ाई और ऊंचाई में बदलने की अनुमति देता है। सिंटैक्स:

cv::resize(
    InputArray src,      // मूल इमेज
    OutputArray dst,     // परिणामी इमेज
    Size dsize,          // नया आकार (चौड़ाई, ऊंचाई)
    double fx = 0,       // X पर स्केल (यदि dsize निर्दिष्ट नहीं है)
    double fy = 0,       // Y पर स्केल
    int interpolation = INTER_LINEAR  // इंटरपोलेशन विधि
);

interpolation पैरामीटर नए पिक्सेल की गणना के लिए उपयोग किए जाने वाले एल्गोरिदम को निर्धारित करता है। मुख्य विकल्प:

  • INTER_NEAREST — निकटतम पड़ोसी विधि (तेज़, लेकिन कम गुणवत्ता)।
  • INTER_LINEAR — बिलिनियर इंटरपोलेशन (गति और गुणवत्ता का अच्छा संतुलन)।
  • INTER_CUBIC — बाइक्यूबिक इंटरपोलेशन (अधिक गुणवत्ता, लेकिन धीमा)।
  • INTER_LANCZOS4 — लैंज़ोश इंटरपोलेशन (बड़ा करने पर सर्वोत्तम गुणवत्ता)।

बाइक्यूबिक इंटरपोलेशन के साथ इमेज को 2 गुना बड़ा करने का उदाहरण:

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

int main() {
    cv::Mat src = cv::imread("input.jpg");
    if (src.empty()) {
        std::cerr << "इमेज लोड करने में विफल" << std::endl;
        return -1;
    }

    cv::Mat dst;
    cv::resize(src, dst, cv::Size(), 2.0, 2.0, cv::INTER_CUBIC);

    cv::imwrite("output_resized.jpg", dst);
    std::cout << "इमेज बड़ा करके सेव कर दी गई" << std::endl;
    return 0;
}

इमेज को क्रॉप करना (crop)

OpenCV में क्रॉप करने के लिए कोई अलग फंक्शन नहीं है। इसके बजाय, Region of Interest (ROI) तंत्र का उपयोग किया जाता है — इमेज पर एक आयताकार क्षेत्र को चिह्नित करना। यह () ऑपरेटर या cv::Mat::operator() विधि के माध्यम से किया जाता है।

क्रॉप करने का सिंटैक्स:

cv::Rect roi(x, y, width, height);
cv::Mat cropped = src(roi);

अनुशंसाएँ