কম্পিউটার

ওপেনসিভিতে পয়েন্টার মেথড ব্যবহার করে রঙ কীভাবে কমানো যায়?


ইমেজ প্রসেসিং এ, আমরা ইমেজের উপর গণনা করি। আরও সুনির্দিষ্টভাবে বলতে গেলে, আমরা পিক্সেলের উপর একটি গণনা করি তাই পিক্সেলের সংখ্যা যত বেশি হবে, গণনা তত বেশি সময় লাগবে। গণনার সময় কমাতে, আমাদের চিত্রটি দক্ষতার সাথে স্ক্যান করতে হবে। আমরা শিখব কিভাবে পয়েন্টার ব্যবহার করে একটি দক্ষ ইমেজ স্ক্যানিং লুপ বাস্তবায়ন করা যায়।

এখানে আমরা রঙ কমানোর কৌশলের উদাহরণ সহ পিক্সেল স্ক্যানিং প্রক্রিয়া দেখব। রঙিন ছবি যেমন 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;//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;
}

আউটপুট

ওপেনসিভিতে পয়েন্টার মেথড ব্যবহার করে রঙ কীভাবে কমানো যায়?


  1. ওপেনসিভি ব্যবহার করে জাভাতে কাস্টম রঙের মানচিত্র কীভাবে তৈরি করবেন?

  2. জাভা ওপেনসিভি লাইব্রেরি ব্যবহার করে একটি রঙিন চিত্রকে সেপিয়া ছবিতে কীভাবে রূপান্তর করবেন?

  3. ওপেনসিভি লাইব্রেরি ব্যবহার করে কীভাবে একটি ইতিবাচক চিত্রকে নেতিবাচক রূপান্তর করবেন?

  4. কিভাবে জাভা OpenCV লাইব্রেরি ব্যবহার করে একটি ছবি লিখতে হয়?