কম্পিউটার

কিভাবে একটি ইমেজ কনট্যুর জাভা OpenCV লাইব্রেরির এলাকা খুঁজে পেতে?


কোনট্যুরগুলি একটি নির্দিষ্ট আকৃতির সীমানা বরাবর সমস্ত বিন্দুকে যুক্ত করা রেখা ছাড়া কিছুই নয়৷ এটি ব্যবহার করে আপনি −

করতে পারেন
  • একটি বস্তুর আকৃতি খুঁজুন।

  • একটি বস্তুর ক্ষেত্রফল গণনা করুন।

  • একটি বস্তু সনাক্ত করুন৷

  • একটি বস্তু চিনুন।

আপনি findContours() ব্যবহার করে একটি চিত্রের বিভিন্ন আকার, বস্তুর কনট্যুর খুঁজে পেতে পারেন পদ্ধতি একই ভাবে আপনি আঁকতে পারেন

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

উদাহরণ

নিম্নলিখিত জাভা উদাহরণটি প্রদত্ত চিত্রে প্রতিটি আকৃতি/বস্তুর ক্ষেত্রফল খুঁজে বের করে, 5000 এর চেয়ে কম ক্ষেত্রফল লাল এবং অবশিষ্ট অংশ সাদা দিয়ে আকারের রূপরেখা আঁকুন৷

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 {
      //Loading the OpenCV core library
      System.loadLibrary( Core.NATIVE_LIBRARY_NAME );
      //Reading the contents of the image
      String file ="D:\\Images\\javafx_graphical.jpg";
      Mat src = Imgcodecs.imread(file);
      //Converting the source image to binary
      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);
      //Finding Contours
      List<MatOfPoint> 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);
         //Calculating the area
         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

উপরের আউটপুট ছাড়াও, উপরের প্রোগ্রামটি নিম্নলিখিত উইন্ডো তৈরি করে −

কিভাবে একটি ইমেজ কনট্যুর জাভা OpenCV লাইব্রেরির এলাকা খুঁজে পেতে?


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

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

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

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