【问题标题】:Line detection in a binary image using opencv使用opencv在二值图像中进行线检测
【发布时间】:2014-10-07 14:26:41
【问题描述】:

我正在尝试检测以下二进制图像中的交叉线:

使用 HoughLine 检测不会产生正确的结果

任何指针或方向将不胜感激。 谢谢

【问题讨论】:

  • 你应该先找到轮廓。

标签: opencv line hough-transform


【解决方案1】:

直接使用图像作为输入,您必须将其反转(白色 = 检测线)。

我将通过 HoughLinesP 获得这些结果

如果你在得到这个结果后放大倒置图像:

使用此代码:

int main()
{
    cv::Mat color = cv::imread("../inputData/LineDetectionCrosses.png");
    cv::Mat gray;

    // convert to grayscale
    cv::cvtColor(color, gray, CV_BGR2GRAY);

    cv::Mat mask = 255-gray;

    //cv::dilate(mask, mask, cv::Mat());

    // detect HoughLinesP
    std::vector<cv::Vec4i> lines;
    cv::HoughLinesP(mask, lines, 1, CV_PI/2880, 50, 300, 10 );
    for( size_t i = 0; i < lines.size(); i++ )
    {
        cv::Vec4i l = lines[i];
        cv::line( color, cv::Point(l[0], l[1]), cv::Point(l[2], l[3]), cv::Scalar(0,0,255), 3, CV_AA);
    }

    // display results
    cv::imshow("mask",mask);
    cv::imshow("output", color);
    cv::waitKey(0);

}

但如果这是我的项目,我可能会先尝试检测圆圈并找到/提取具有已知中心点的线!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-28
    • 2020-03-15
    • 1970-01-01
    • 1970-01-01
    • 2020-06-07
    相关资源
    最近更新 更多