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

OpenCV Hough Circle Transform-এর জাভা ইমপ্লিমেন্টেশন

আপনি Hough সার্কেল ট্রান্সফর্ম ব্যবহার করে একটি ইমেজে সার্কেল ডিটেক্ট করতে পারেন। Hough Circle transform প্রয়োগ করতে HoughCircles() মেথড ব্যবহার করুন, এই মেথড নিচের প্যারামিটার গ্রহণ করে:

  • একটি Mat অবজেক্ট যা ইনপুট ইমেজকে প্রতিনিধিত্ব করে।
  • একটি Mat অবজেক্ট যা খুঁজে পাওয়া সার্কেলের আউটপুট ভেক্টর স্টোর করে।
  • একটি ইন্টিজার ভেরিয়েবল যা ডিটেকশন মেথডকে প্রতিনিধিত্ব করে।
  • দুটি ডাবল ভেরিয়েবল যা অ্যাকিউমুলেটর রেজোলিউশনের ইমেজ রেজোলিউশনের সাথে ইনভার্স রেশিও এবং ডিটেক্টেড সার্কেলের সেন্টারের মিনিমাম দূরত্বকে প্রতিনিধিত্ব করে।

উদাহরণ

import org.opencv.core.Core;
import org.opencv.core.Mat;
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;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.IOException;
import javafx.application.Application;
import javafx.embed.swing.SwingFXUtils;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.image.ImageView;
import javafx.scene.image.WritableImage;
import javafx.stage.Stage;

public class HoughCircleTransform extends Application {
    public void start(Stage stage) throws IOException {
        // OpenCV কোর লাইব্রেরি লোড করা
        System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
        
        String file = "D:\\Images\\compass.jpg";
        Mat src = Imgcodecs.imread(file);
        
        // ইমেজকে গ্রে-তে কনভার্ট
        Mat gray = new Mat();
        Imgproc.cvtColor(src, gray, Imgproc.COLOR_RGBA2GRAY);
        
        // ইমেজ ব্লার করা
        Mat blur = new Mat();
        Imgproc.medianBlur(gray, blur, 5);
        
        // Hough সার্কেল ডিটেক্ট করা
        Mat circles = new Mat();
        Imgproc.HoughCircles(blur, circles, Imgproc.HOUGH_GRADIENT, Math.PI/180, 150);
        
        for (int i = 0; i < circles.cols(); i++) {
            double[] data = circles.get(0, i);
            Point center = new Point(Math.round(data[0]), Math.round(data[1]));
            // সার্কেল সেন্টার
            Imgproc.circle(src, center, 1, new Scalar(0, 0, 255), 3, 8, 0);
            // সার্কেল আউटलাইন
            int radius = (int) Math.round(data[2]);
            Imgproc.circle(src, center, radius, new Scalar(0, 0, 255), 3, 8, 0);
        }
        
        // ম্যাট্রিক্সকে JavaFX writable ইমেজে কনভার্ট
        Image img = HighGui.toBufferedImage(src);
        WritableImage writableImage = SwingFXUtils.toFXImage((BufferedImage) img, null);
        
        // ইমেজ ভিউ সেট করা
        ImageView imageView = new ImageView(writableImage);
        imageView.setX(10);
        imageView.setY(10);
        imageView.setFitWidth(575);
        imageView.setPreserveRatio(true);
        
        // Scene অবজেক্ট সেট করা
        Group root = new Group(imageView);
        Scene scene = new Scene(root, 595, 400);
        stage.setTitle("Hough Circle Transform");
        stage.setScene(scene);
        stage.show();
    }
    public static void main(String args[]) {
        launch(args);
    }
}

ইনপুট ইমেজ

OpenCV Hough Circle Transform-এর জাভা ইমপ্লিমেন্টেশন

আউটপুট

প্রোগ্রাম এক্সিকিউট করলে নিচের আউটপুট পাওয়া যায়:

OpenCV Hough Circle Transform-এর জাভা ইমপ্লিমেন্টেশন

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

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

  3. জাভা ওপেনসিভি (OpenCV) ব্যবহার করে বৃত্ত আঁকার পদ্ধতি

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