gpt4 book ai didi

java - 如何在 Java 中使用 OpenCV 检测图像中的线条

转载 作者:行者123 更新时间:2023-12-01 09:22:50 31 4
gpt4 key购买 nike

我有教程中的代码,我想检测图像中的直线。我有这段代码,但对于 1 行 HoughLinesP 生成数百个点而不是 2 个点(起点和终点 - [x1,y1] 和 [x2, y2])。即使我使用空图像,我也能得到 99 分...非常感谢大家。

    Mat src = Highgui.imread("C:/Users/Daniel/Desktop/line.png",Highgui.CV_LOAD_IMAGE_COLOR);
Mat lines = new Mat();
Mat grey = new Mat();

Imgproc.cvtColor(m, grey, Imgproc.COLOR_BGR2GRAY);
Imgproc.HoughLinesP(grey, lines, 1, Math.PI / 180, 50, 50, 10);

for (int x = 0; x < lines.cols(); x++)
{
double[] vec = lines.get(0, x);
double x1 = vec[0],
y1 = vec[1],
x2 = vec[2],
y2 = vec[3];
Point start = new Point(x1, y1);
Point end = new Point(x2, y2);

Core.line(grey, start, end, new Scalar(100,100,100), 1);
}

//just show image
new LoadImage("C:/Users/Daniel/Desktop/cdst.jpg",cdst);

//print matrix of points of all lines - here I get a lot of points for 1 line
System.out.println(lines.dump());

最佳答案

虽然您没有提供示例图像,也没有完整描述问题,但我会尝试回答它,因为我知道问题可能是什么(当然,在您的问题中有完整的详细信息之前,我无法确定)。

问题是您正在尝试从看起来像这样的图像中提取线条: enter image description here

HoughLinesP 需要一个二值图像(可能是边缘检测算法的输出),其中线条以白色(或二值图像中的 1)表示,背景以黑色(或0)。问题是您的图像可能具有相反的表示形式,这使得该函数给出了太多的输出行。你想要的是这样的: enter image description here

这里是使用 HoughLinesP 获取直线方程的 C++ 代码。

#include <iostream>
#include <cv.h>
#include <highgui.h>



int main()
{
cv::Mat inImage = cv::imread("savedPng.png");

cv::Mat ginImage;
cv::cvtColor(inImage, ginImage, CV_BGR2GRAY);

cv::vector<cv::Vec4i> lines;
cv::HoughLinesP(ginImage, lines, 1, CV_PI/180, 50, 50, 10 );

for( size_t i = 0; i < lines.size(); i++ )
{
cv::Vec4i l = lines[i];
std::cout << "( " << l[0]<< ", " << l[1]<< std::endl;
std::cout << "( " << l[2]<< ", " << l[3] << std::endl;
std::cout << "***********"<< std::endl;

}
return 1;
}

这是输出:

( 103, 294
( 600, 41
***********
( 105, 294
( 601, 42
***********
( 102, 294
( 600, 40
***********
( 112, 292
( 601, 43
***********
( 105, 291
( 416, 133
***********
( 445, 123
( 601, 44
***********

显示检测到的线的输出图像: enter image description here

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

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