Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> C++

OpenCV में पॉइंटर विधि का उपयोग करके रंग कैसे कम करें?

इमेज प्रोसेसिंग में, हम इमेज पर कंप्यूटेशन करते हैं। अधिक विशिष्ट होने के लिए, हम पिक्सेल पर गणना करते हैं ताकि पिक्सेल की संख्या जितनी अधिक हो, गणना करने में उतना ही अधिक समय लगे। गणना समय को कम करने के लिए, हमें छवि को कुशलतापूर्वक स्कैन करने की आवश्यकता है। हम सीखेंगे कि पॉइंटर्स का उपयोग करके एक कुशल इमेज स्कैनिंग लूप को कैसे लागू किया जाए।

यहां हम रंग घटाने की रणनीति के उदाहरण के साथ पिक्सेल स्कैनिंग प्रक्रिया देखेंगे। आरजीबी छवियों जैसे रंगीन चित्र 3 चैनलों से बने होते हैं। इनमें से प्रत्येक चैनल में समान संख्या में पिक्सेल होते हैं लेकिन संबंधित मानों के साथ। इनमें से प्रत्येक मान 8-बिट अहस्ताक्षरित चार मान है।

इसलिए, संभावित रंगों की कुल संख्या 256 x 256 x 256 =16,777,216 है। संभव रंग की इस विशाल संख्या को कम करने के लिए हम प्रत्येक पिक्सेल के मान को समान आकार के घन से विभाजित कर सकते हैं। यदि हम 8 x 8 x 8 घन का उपयोग करके मानों को विभाजित करते हैं तो संभावित रंगों की संख्या 32 x 32 x 32 =32,768 रंग बन जाती है।

जब रंगों की संख्या कम हो जाती है, तो सिस्टम तेज हो जाता है। इस कमी को पूरा करने के लिए, हमें प्रत्येक पिक्सेल को स्कैन करना होगा, जो एक समय लेने वाला कार्य है। इसलिए हमें एक कुशल छवि स्कैनिंग विधि की आवश्यकता है।

निम्न प्रोग्राम दर्शाता है कि OpenCV में पॉइंटर विधि का उपयोग करके रंग को कैसे कम किया जाए।

उदाहरण

#include<iostream>
#include<opencv2/highgui/highgui.hpp>
using namespace cv;//Declaring cv namespace
using namespace std;//Declaring std namespace
void reducing_Color(Mat &image, int div=64){ //Declaring the function//
   int   total_rows = image.rows;//getting the number of lines//
   int total_columns = image.cols * image.channels();//getting the number of columns per line//
   for (int j = 0; j < total_rows; j++){ //initiating a for loop for rows
      uchar* data = image.ptr<uchar>(j);
      for (int i = 0; i < total_columns; i++){ //initiating a for loop for columns//
         data[i] = data[i] / div * div + div / 2;//processing the pixels//
      }
   }  
}
int main() {
   Mat image;//taking an image matrix//
   image = imread("grapes.jpg");//loading an image//
   namedWindow("Image Window");//Declaring another window//
   reducing_Color(image);//calling the function//
   imshow("Image Window", image);//showing the image with reduced color//
   waitKey(0);
   return 0;
}

आउटपुट

OpenCV में पॉइंटर विधि का उपयोग करके रंग कैसे कम करें?


  1. जावा ओपनसीवी लाइब्रेरी का उपयोग करके रंगीन छवि को सेपिया छवि में कैसे परिवर्तित करें?

    रंगीन छवि को सेपिया में बदलने के लिए एल्गोरिथम - प्रत्येक पिक्सेल का लाल हरा नीला मान प्राप्त करें इन 3 रंगों का औसत प्राप्त करें। गहराई और तीव्रता के मानों को परिभाषित करें (आदर्श रूप से 20, और 30)। मानों को − . के रूप में संशोधित करें लाल =लाल + (गहराई*2)। हरा =हरा +गहराई। नील

  1. ओपनसीवी लाइब्रेरी का उपयोग करने के लिए सकारात्मक छवि को नकारात्मक में कैसे परिवर्तित करें?

    छवि को नकारात्मक में बदलने के लिए एल्गोरिदम प्रत्येक पिक्सेल का लाल हरा नीला मान प्राप्त करें प्रत्येक रंग मान को 255 से घटाएं और उन्हें नए रंग मानों के रूप में सहेजें। संशोधित रंगों से एक नया पिक्सेल मान बनाएं। नया मान पिक्सेल पर सेट करें। जावा में क्रियान्वयन ImageIO.read() विधि क

  1. जावा ओपनसीवी लाइब्रेरी का उपयोग करके एक छवि कैसे लिखें?

    OpenCV लाइब्रेरी का उपयोग करके आप इमेज प्रोसेसिंग ऑपरेशन जैसे इमेज फिल्टरिंग, ज्योमेट्रिकल इमेज ट्रांसफॉर्मेशन, कलर स्पेस कन्वर्जन, हिस्टोग्राम आदि कर सकते हैं। इमेज लिखना जब भी आप Imgcodecs वर्ग की imread() पद्धति का उपयोग करके किसी छवि की सामग्री को पढ़ते हैं तो परिणाम मैट्रिक्स ऑब्जेक्ट में पढ़ा