gpt4 book ai didi

java - 如何在 OpenCV (Java) 中使用 HoughLines 检测线条?

转载 作者:搜寻专家 更新时间:2023-10-31 19:32:50 25 4
gpt4 key购买 nike

我目前正在尝试使用 OpenCV 中的 HoughLines 检测图像上是否部署了平交道口障碍。我以为我的代码会在我的图像上画一条线,只要屏障出现在图像中 - 但我收到一条错误消息,指出“Mat 数据类型不兼容”。可以告诉我如何使用 OpenCV 在 Java 中检测线条吗?

public class DetectLines {

public static void main(String args[]) {

System.loadLibrary(Core.NATIVE_LIBRARY_NAME);

Mat eventless = Highgui.imread("files/eventless.png");
Mat barrier = Highgui.imread("files/barrier/lc-00201.png");
Mat difference = new Mat();
Mat lines = new Mat();

Core.absdiff(eventless, barrier, difference);

Mat grey = new Mat();
Imgproc.cvtColor(difference, grey, Imgproc.COLOR_BGR2GRAY);

Imgproc.HoughLines(grey, lines, 5.0, 4.0, 7);

Imshow ims1 = new Imshow("Lines");
ims1.showImage(lines);

}

}

最佳答案

行在行矩阵中返回,该矩阵有两列,其中每行返回极坐标的 rho 和 theta 参数。这些坐标分别指图像左上角与线旋转之间的距离(以弧度为单位)。因此,为了使用 show 方法,您必须创建一个 Mat 来表示使用线坐标的线。

  public Mat getHoughTransform(Mat image, double rho, double theta, int threshold) {
Mat result = Image.getInstance().getImage().clone();
Mat lines = new Mat();
Imgproc.HoughLines(image, lines, rho, theta, threshold);

for (int i = 0; i < lines.cols(); i++) {
double data[] = lines.get(0, i);
double rho1 = data[0];
double theta1 = data[1];
double cosTheta = Math.cos(theta1);
double sinTheta = Math.sin(theta1);
double x0 = cosTheta * rho1;
double y0 = sinTheta * rho1;
Point pt1 = new Point(x0 + 10000 * (-sinTheta), y0 + 10000 * cosTheta);
Point pt2 = new Point(x0 - 10000 * (-sinTheta), y0 - 10000 * cosTheta);
Imgproc.line(result, pt1, pt2, new Scalar(0, 0, 255), 2);
}
return result;
}

这是一种更简单的方法。涉及到Imgproc.HoughLinesP方法。

public Mat getHoughPTransform(Mat image, double rho, double theta, int threshold) {
Mat result = Image.getInstance().getImage().clone();
Mat lines = new Mat();
Imgproc.HoughLinesP(image, lines, rho, theta, threshold);

for (int i = 0; i < lines.cols(); i++) {
double[] val = lines.get(0, i);
Imgproc.line(result, new Point(val[0], val[1]), new Point(val[2], val[3]), new Scalar(0, 0, 255), 2);
}
return result;
}

关于java - 如何在 OpenCV (Java) 中使用 HoughLines 检测线条?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29493267/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com