आप हफ लाइन ट्रांसफॉर्म का उपयोग करके दी गई इमेज में सीधी रेखाओं का पता लगा सकते हैं। OpenCV में दो प्रकार के हफ लाइन ट्रांसफॉर्म उपलब्ध हैं: स्टैंडर्ड हफ लाइन ट्रांसफॉर्म और प्रोबेबिलिस्टिक हफ लाइन ट्रांसफॉर्म।
आप Imgproc क्लास के HoughLinesP() मेथड का उपयोग करके प्रोबेबिलिस्टिक हफ लाइन ट्रांसफॉर्म लागू कर सकते हैं, यह मेथड निम्नलिखित पैरामीटर्स स्वीकार करता है -
स्रोत इमेज और रेखाओं के पैरामीटर्स (r, Φ) को स्टोर करने वाले वेक्टर का प्रतिनिधित्व करने वाले दो Mat ऑब्जेक्ट्स।
पैरामीटर्स r (पिक्सल्स) और Φ (रेडियंस) के रिज़ॉल्यूशन का प्रतिनिधित्व करने वाले दो डबल वेरिएबल्स।
एक रेखा "डिटेक्ट" करने के लिए न्यूनतम इंटरसेक्शन्स की संख्या का प्रतिनिधित्व करने वाला एक इंटीजर।
उदाहरण
निम्नलिखित Java उदाहरण OpenCV में प्रोबेबिलिस्टिक हफ लाइन ट्रांसफॉर्म का उपयोग करके इमेज में रेखाओं का पता लगाता है -
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.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 HoughLineProbabilisticTransform extends Application {
@Override
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);
// Canny का रंग बदलना
Mat cannyColor = new Mat();
Imgproc.cvtColor(edges, cannyColor, Imgproc.COLOR_GRAY2BGR);
// (Canny से) हफ लाइन्स डिटेक्ट करना
Mat lines = new Mat();
Imgproc.HoughLinesP(edges, lines, 1, Math.PI/180, 50, 50, 10);
for (int i = 0; i < lines.rows(); i++) {
double[] data = lines.get(i, 0);
// इमेज पर रेखाएं खींचना
Point pt1 = new Point(data[0], data[1]);
Point pt2 = new Point(data[2], data[3]);
Imgproc.line(cannyColor, pt1, pt2, new Scalar(0, 0, 255), 3);
}
// मैट्रिक्स को JavaFX राइटेबल इमेज में कनवर्ट करना
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("हफ लाइन ट्रांसफॉर्म");
stage.setScene(scene);
stage.show();
}
public static void main(String args[]) {
launch(args);
}
}
इनपुट इमेज

आउटपुट
उपरोक्त प्रोग्राम निष्पादित करने पर निम्नलिखित आउटपुट उत्पन्न करता है -
