OpenCV Hough сильнейшие линии

Выполняют ли функции HoughLines или HoughLinesP в OpenCV список строк в порядке хранения, например, функция HoughCircles? Я хотел бы знать порядок строк. Также было бы очень удобно получить значение аккумулятора для линий, поэтому вместо фиксированного можно использовать интеллектуальный и адаптивный порог. Доступны ли параметры заказа или аккумулятора без самостоятельно переписывать OpenCV?

Ответ 1

HoughTransform упорядочивает строки, опускающиеся по количеству голосов. Вы можете увидеть код здесь

Однако подсчет голосов теряется по мере возврата функции - единственный способ изменить OpenCV.

Хорошая новость заключается в том, что это не очень сложно - я сделал это сам один раз. Это показатель минут, чтобы изменить вывод с vector< Vec2f > на vector< Vec3f > и заполнить последний параметр с помощью подсчета голосов.

Кроме того, вам нужно изменить CvLinePolar, чтобы добавить третий параметр - hough реализован в C, и в нем есть оболочка в C++, поэтому вам нужно изменить как реализацию, так и оболочку.

Основной код для изменения здесь

 for( i = 0; i < linesMax; i++ )
 {
        CvLinePolar line;
        int idx = sort_buf[i];
        int n = cvFloor(idx*scale) - 1;
        int r = idx - (n+1)*(numrho+2) - 1;
        line.rho = (r - (numrho - 1)*0.5f) * rho;
        line.angle = n * theta;

        // add this line, and a field voteCount to CvLinePolar
        // DO NOT FORGET TO MODIFY THE C++ WRAPPER
        line.voteCount = accum[idx];          

        cvSeqPush( lines, &line );
 }