Обнаружение строки в двоичном изображении с использованием opencv

Я пытаюсь обнаружить пересекающиеся линии в следующем двоичном изображении:

введите здесь описание изображения

Использование обнаружения HoughLine не дает правильных результатов

Любые указатели или направления будут оценены. Спасибо


person user1508422    schedule 07.10.2014    source источник
comment
Сначала нужно найти контуры.   -  person Andrey Smorodov    schedule 07.10.2014


Ответы (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);

}

но если бы это был мой проект, я бы, наверное, сначала попытался обнаружить круги и найти/извлечь линии с известной центральной точкой!

person Micka    schedule 07.10.2014