Hough লাইন ট্রান্সফর্ম ব্যবহার করে একটি ইমেজে সোজা রেখা ডিটেক্ট করা যায়। OpenCV-এ দুটি ধরনের Hough Line Transform আছে: Standard Hough Line Transform এবং Probabilistic Hough Line Transform।
Standard Hough line transform প্রয়োগ করতে Imgproc ক্লাসের HoughLines() মেথড ব্যবহার করুন। এই মেথড গ্রহণ করে:
- দুটি Mat অবজেক্ট যা সোর্স ইমেজ এবং লাইনের প্যারামিটার (r, Φ) স্টোর করার ভেক্টরকে প্রতিনিধিত্ব করে।
- দুটি ডাবল ভেরিয়েবল যা প্যারামিটার r (পিক্সেল) এবং Φ (রেডিয়ান) এর রেজোলিউশনকে প্রতিনিধিত্ব করে।
- একটি ইন্টিজার যা একটি লাইন "ডিটেক্ট" করার জন্য মিনিমাম ইন্টারসেকশন সংখ্যাকে প্রতিনিধিত্ব করে।
Probabilistic Hough line transform প্রয়োগ করতে Imgproc ক্লাসের HoughLinesP() মেথড ব্যবহার করুন (সেইম প্যারামিটার)।
একটি ইমেজে এজ ডিটেক্ট করতে Imgproc ক্লাসের Canny() মেথড ব্যবহার করুন। এই মেথড গ্রহণ করে:
- দুটি Mat অবজেক্ট যা সোর্স এবং ডেস্টিনেশন ইমেজকে প্রতিনিধিত্ব করে।
- দুটি ডাবল ভেরিয়েবল যা থ্রেশহোল্ড ভ্যালু ধারণ করে।
Canny এজ ডিটেক্টর ব্যবহার করে একটি ইমেজের এজ ডিটেক্ট করতে:
- imread() মেথড ব্যবহার করে সোর্স ইমেজের কন্টেন্ট পড়ুন (Imgcodecs ক্লাসের)।
- cvtColor() মেথড ব্যবহার করে এটাকে গ্রेস্কেল ইমেজে কনভার্ট করুন (Imgproc ক্লাসের)।
- blur() মেথড ব্যবহার করে রেজাল্টেন্ট (গ্রে) ইমেজ ব্লার করুন (কার্নেল ভ্যালু ৩)।
- canny() মেথড ব্যবহার করে ব্লারড ইমেজে ক্যানি এজ ডিটেকশন অ্যালগরিদম প্রয়োগ করুন (Imgproc ক্লাসের)।
- সকল মান ০ হওয়া একটি খালি ম্যাট্রিক্স তৈরি করুন।
- copyTo() মেথড ব্যবহার করে ডিটেক্টেড এজগুলো তামarekin যোগ করুন (Mat ক্লাসের)।
উদাহরণ
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;
import org.opencv.core.Core;
import org.opencv.core.CvType;
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;
public class HoughLineTransform extends Application {
public void start(Stage stage) throws IOException {
// OpenCV কোর লাইব্রেরি লোড করা
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
String file = "D:\\Images\\road4.jpg";
Mat src = Imgcodecs.imread(file);
// ইমেজকে গ্রে-তে কনভার্ট
Mat gray = new Mat();
Imgproc.cvtColor(src, gray, Imgproc.COLOR_RGBA2GRAY);
// এজ ডিটেক্ট করা
Mat edges = new Mat();
Imgproc.Canny(gray, edges, 60, 60*3, 3, false);
// ক্যানি এর রঙ পরিবর্তন
Mat cannyColor = new Mat();
Imgproc.cvtColor(edges, cannyColor, Imgproc.COLOR_GRAY2BGR);
// (ক্যানি থেকে) Hough লাইন ডিটেক্ট করা
Mat lines = new Mat();
Imgproc.HoughLines(edges, lines, 1, Math.PI/180, 150);
for (int i = 0; i < lines.rows(); i++) {
double[] data = lines.get(i, 0);
double rho = data[0];
double theta = data[1];
double a = Math.cos(theta);
double b = Math.sin(theta);
double x0 = a*rho;
double y0 = b*rho;
// ইমেজে লাইন আঁকা
Point pt1 = new Point();
Point pt2 = new Point();
pt1.x = Math.round(x0 + 1000*(-b));
pt1.y = Math.round(y0 + 1000*(a));
pt2.x = Math.round(x0 - 1000*(-b));
pt2.y = Math.round(y0 - 1000*(a));
Imgproc.line(cannyColor, pt1, pt2, new Scalar(0, 0, 255), 3);
}
// ম্যাট্রিক্সকে JavaFX writable ইমেজে কনভার্ট
Image img = HighGui.toBufferedImage(cannyColor);
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 Line Transform");
stage.setScene(scene);
stage.show();
}
public static void main(String args[]) {
launch(args);
}
}
ইনপুট ইমেজ

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