首页 > Java > java教程 > 在Java中实现OpenCV的概率霍夫线变换

在Java中实现OpenCV的概率霍夫线变换

PHPz
发布: 2023-08-24 23:37:06
转载
1060 人浏览过

使用Hough线变换可以在给定的图像中检测直线。在OpenCV中有两种可用的Hough线变换,分别是标准Hough线变换和概率Hough线变换。

您可以使用Imgproc类的HoughLinesP()方法应用概率Hough线变换,该方法接受以下参数:

  • 表示源图像和存储线条参数(r, Φ)的向量的两个Mat对象。

  • 表示参数r(像素)和Φ(弧度)的分辨率的两个double变量。

  • 表示“检测”一条线所需的最小交点数的整数。

示例

以下Java示例使用OpenCV的概率Hough线变换检测图像中的线条:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

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 {

   public void start(Stage stage) throws IOException {

      //Loading the OpenCV core library

      System.loadLibrary( Core.NATIVE_LIBRARY_NAME );

      String file ="D:\Images\road4.jpg";

      Mat src = Imgcodecs.imread(file);

      //Converting the image to Gray

      Mat gray = new Mat();

      Imgproc.cvtColor(src, gray, Imgproc.COLOR_RGBA2GRAY);

      //Detecting the edges

      Mat edges = new Mat();

      Imgproc.Canny(gray, edges, 60, 60*3, 3, false);

      // Changing the color of the canny

      Mat cannyColor = new Mat();

      Imgproc.cvtColor(edges, cannyColor, Imgproc.COLOR_GRAY2BGR);

      //Detecting the hough lines from (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);

         //Drawing lines on the image

         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);

      }

      //Converting matrix to JavaFX writable image

      Image img = HighGui.toBufferedImage(cannyColor);

      WritableImage writableImage= SwingFXUtils.toFXImage((BufferedImage) img, null);

      //Setting the image view

      ImageView imageView = new ImageView(writableImage);

      imageView.setX(10);

      imageView.setY(10);

      imageView.setFitWidth(575);

      imageView.setPreserveRatio(true);

      //Setting the Scene object

      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);

   }

}

登录后复制

输入图像

在Java中实现OpenCV的概率霍夫线变换

输出

执行后,上述代码将产生以下输出 −

在Java中实现OpenCV的概率霍夫线变换

以上是在Java中实现OpenCV的概率霍夫线变换的详细内容。更多信息请关注PHP中文网其他相关文章!

相关标签:
来源:tutorialspoint.com
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板