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

Java OpenCV লাইব্রেরি ব্যবহার করে ইমেজ কন্টুরের এলিয়া বের করার পদ্ধতি

কন্টুর হলো একটি নির্দিষ্ট আকৃতির বাউন্ডারি লাইন আঁকা যা সকল পয়েন্টকে জড়ে। এর ব্যবহার করে আপনি:

  • একটি অবজেক্টের আকৃতি খুঁজে পেতে পারেন।
  • একটি অবজেক্টের এলিয়া ক্যালকুলেট করতে পারেন।
  • একটি অবজেক্ট ডিটেক্ট করতে পারেন।
  • একটি অবজেক্ট রিকগনাইজ করতে পারেন।

আপনি findContours() মেথড ব্যবহার করে একটি ইমেজে বিভিন্ন আকৃতি, অবজেক্টের কন্টুর খুঁজে পেতে পারেন। একইভাবে আপনি আঁকতে পারেন।

আপনি দেওয়া ইনপুট ইমেজের আকৃতিগুলোর এলিয়াও বের করতে পারেন। তা করতে আপনাকে Imgproc ক্লাসের contourArea() মেথড আহ্বান করতে হবে। এই মেথড একটি নির্দিষ্ট আকৃতির কন্টুর গ্রহণ করে, এর এলিয়া খুঁজে বের করে এবং রিটার্ন করে।

উদাহরণ

নিচের জাভা উদাহরণ দেওয়া ইমেজের প্রতিটি আকৃতি/অবজেক্টের এলিয়া বের করে, ৫০০০-এর চেয়ে বড় এলিয়া 가진 আকৃতির আউटलাইন লাল রঙে এবং বাকিগুলো সাদা রঙে আঁকে।

import java.util.ArrayList;
import java.util.List;
import org.opencv.core.Core;
import org.opencv.core.CvType;
import org.opencv.core.Mat;
import org.opencv.core.MatOfPoint;
import org.opencv.core.Point;
import org.opencv.core.Scalar;
import org.opencv.highgui.HighGui;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;

public class FindContourArea {
    public static void main(String args[]) throws Exception {
        // OpenCV কোর লাইব্রেরি লোড করা
        System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
        
        // ইমেজের কন্টেন্ট পড়া
        String file = "D:\\Images\\javafx_graphical.jpg";
        Mat src = Imgcodecs.imread(file);
        
        // সোর্স ইমেজকে বাইনারি-তে কনভার্ট
        Mat gray = new Mat(src.rows(), src.cols(), src.type());
        Imgproc.cvtColor(src, gray, Imgproc.COLOR_BGR2GRAY);
        Mat binary = new Mat(src.rows(), src.cols(), src.type(), new Scalar(0));
        Imgproc.threshold(gray, binary, 100, 255, Imgproc.THRESH_BINARY_INV);
        
        // কন্টুর খুঁজা
        List contours = new ArrayList<>();
        Mat hierarchey = new Mat();
        Imgproc.findContours(binary, contours, hierarchey, Imgproc.RETR_TREE,
                Imgproc.CHAIN_APPROX_SIMPLE);
        
        Mat draw = Mat.zeros(src.size(), CvType.CV_8UC3);
        for (int i = 0; i < contours.size(); i++) {
            Scalar color = new Scalar(0, 0, 255);
            // এলিয়া ক্যালকুলেট
            double cont_area = Imgproc.contourArea(contours.get(i));
            System.out.println(cont_area);
            if (cont_area > 5000.0) {
                Imgproc.drawContours(draw, contours, i, color, 2,
                        Imgproc.LINE_8, hierarchey, 2, new Point());
            } else {
                color = new Scalar(255, 255, 255);
                Imgproc.drawContours(draw, contours, i, color, 2, Imgproc.LINE_8,
                        hierarchey, 2, new Point());
            }
        }
        
        HighGui.imshow("Contours operation", draw);
        HighGui.waitKey();
    }
}

ইনপুট ইমেজ

আউটপুট

4091.0
6336.0
189.0
6439.0
4903.0

উপরের আউটপুট ছাড়াও প্রোগ্রাম নিচের উইন্ডো জেনারেট করে:

Java OpenCV লাইব্রেরি ব্যবহার করে ইমেজ কন্টুরের এলিয়া বের করার পদ্ধতি

  1. জাভা ওপেনসিভি লাইব্রেরি ব্যবহার করে চিত্র ফ্লিপ (Flip) করা

  2. জাভা ওপেনসিভি লাইব্রেরি ব্যবহার করে মিরর ইমেজ তৈরি

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

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