इमेज प्रोसेसिंग में, हम इमेज पर गणना करते हैं। अधिक विशिष्ट होने के लिए, हम पिक्सेल पर गणना करते हैं इसलिए पिक्सेल की संख्या जितनी अधिक होगी, गणना उतनी ही अधिक समय लेने वाली होगी। गणना समय को कम करने के लिए, हमें इमेज को कुशलतापूर्वक स्कैन करने की आवश्यकता होती है। हम सीखेंगे कि पॉइंटर्स का उपयोग करके एक कुशल इमेज स्कैनिंग लूप को कैसे लागू किया जाए।
रंग कमी रणनीति का उदाहरण
रंगीन इमेज जैसे RGB इमेज 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;
using namespace std;
void reducing_Color(Mat &image, int div=64) {
int total_rows = image.rows;
int total_columns = image.cols * image.channels();
for (int j = 0; j < total_rows; j++) {
uchar* data = image.ptr<uchar>(j);
for (int i = 0; i < total_columns; i++) {
data[i] = data[i] / div * div + div / 2;
}
}
}
int main() {
Mat image;
image = imread("grapes.jpg");
namedWindow("Image Window");
reducing_Color(image);
imshow("Image Window", image);
waitKey(0);
return 0;
}
आउटपुट
