কম্পিউটার টিউটোরিয়াল

OpenCV-এ পয়েন্টার মেথড ব্যবহার করে রঙ কমাতে কীভাবে? পূর্ণ নির্দেশিকা


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

রঙ কমানোর কৌশল (Color Reduction Strategy)

RGB ছবি তিনটি চ্যানেল দিয়ে গঠিত। প্রতিটি চ্যানেলে পিক্সেলের সংখ্যা সমান কিন্তু মান ভিন্ন। প্রতিটি মান ৮-বিট আনসাইনড চার (০-২৫৫)। তাই মোট সম্ভাব্য রঙের সংখ্যা: ২৫৬ × ২৫৬ × ২৫৬ = ১৬,৭৭৭,২১৬। এই বিশাল সংখ্যা কমানোর জন্য প্রতিটি পিক্সেলের মানকে সমান আকারের কিউবে ভাগ করা হয়। যদি ৮×৮×৮ কিউব ব্যবহার করা হয়, তবে সম্ভাব্য রঙের সংখ্যা হয়ে যায় ৩২×৩২×৩২ = ৩২,৭৬৮। রঙ কমলে সিস্টেম দ্রুত কাজ করে, কিন্তু প্রতিটি পিক্সেল স্ক্যান করা সময়সাপেক্ষ। তাই দক্ষ স্ক্যানিং পদ্ধতি প্রয়োজন।

উদাহরণ কোড

#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;
}

আউটপুট

OpenCV-এ পয়েন্টার মেথড ব্যবহার করে রঙ কমাতে কীভাবে? পূর্ণ নির্দেশিকা


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

  2. জাভা ওপেনসিভি লাইব্রেরি ব্যবহার করে রঙিন চিত্রকে সেপিয়া (Sepia) চিত্রে রূপান্তর

  3. ওপেনসিভি লাইব্রেরি ব্যবহার করে পজিটিভ চিত্রকে 네가েটিভে রূপান্তর

  4. জাভা ওপেনসিভি লাইব্রেরি ব্যবহার করে চিত্র লিখা/সংরক্ষণ