c ++, opecv: HoughLines () не получает значения, переданные трекбарами - PullRequest
0 голосов
/ 20 апреля 2019

Я должен обнаружить две белые линии дороги с помощью функции HoughLines.Я использую три трекбара, чтобы найти лучшие параметры для обнаружения ТОЛЬКО двух белых линий дороги.Я пробовал это: (проблема в том, что это выглядит, даже если я изменяю значения трекбаров, он не обновляет изображения, он все еще на первых значениях).Я использую OpenCV с C ++.

Без трекбаров это работает, но практически невозможно найти хорошие значения без него, потому что я не знаю, как настроить параметры, а изображение довольно сложное.

#include <iostream>
#include <opencv2/core.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/imgproc.hpp>
#include <opencv2/calib3d.hpp>


using namespace cv;
using namespace std;

const int kernel_size = 3;

Mat src, src_gray;
Mat dst, detected_edges;
Mat cdst;

int slider_value_one;
int slider_value_two;
int slider_value_three;


vector<Vec2f> lines; // will hold the results of the detection

static void Hough_transform(int, void*)
{
    // Standard Hough Line Transform
    HoughLines(detected_edges, lines, 1, CV_PI/180, 130,slider_value_one,slider_value_two); // runs the actual detectio
    // Draw the lines
    for( size_t i = 0; i < lines.size(); i++ )
    {
        float rho = lines[i][0], theta = lines[i][1];
        Point pt1, pt2;
        double a = cos(theta), b = sin(theta);
        double x0 = a*rho, y0 = b*rho;
        pt1.x = cvRound(x0 + 1000*(-b));
        pt1.y = cvRound(y0 + 1000*(a));
        pt2.x = cvRound(x0 - 1000*(-b));
        pt2.y = cvRound(y0 - 1000*(a));
        line( cdst, pt1, pt2, Scalar(0,0,255), 3, CV_AA);
    }
    //printing
    imshow("standard Hough Line Transform", cdst);
}//HoughTransform



int main(int argc, const char * argv[]) {
    //-----Loads an image
    src = imread("/Users/massimilianolorenzin/Documents/Progetti\ XCode/lab4/lab4/lab4/images/road2.png");
    /// ---- CANNY DETECTOR
    /// Convert the image to grayscale
    cvtColor( src, src_gray, CV_BGR2GRAY);
    /// Reduce noise with a kernel 3x3
    blur( src_gray, detected_edges, Size(3,3) );
    /// Canny detector
    Canny( detected_edges, detected_edges, 150, 450, kernel_size );

    // Copy edges to the images that will display the results in BGR
    cvtColor(detected_edges, cdst, COLOR_GRAY2BGR);



    /// ---- HOUGH LINE TRANSFORM
    namedWindow("standard Hough Line Transform"); // Create Window

    //first TrackBar
    createTrackbar( "First Par", "standard Hough Line Transform", &slider_value_one, 200, Hough_transform);
    Hough_transform(slider_value_one,0 );

    //second TrackBar
    createTrackbar( "Second Par", "standard Hough Line Transform", &slider_value_two, 100, Hough_transform);
    Hough_transform(slider_value_two, 0 );

    //third TrackBar
    createTrackbar( "Third Par", "standard Hough Line Transform", &slider_value_three, 100, Hough_transform);
    Hough_transform( slider_value_three, 0 );
//printing
    imshow("Input Image",src);
    imshow( "edges", detected_edges );

    waitKey(0);
    return 0;

HoughLines () выглядит не отвечает на значения, установленные с помощью трекбаров.Окно отображается нормально, slider_value_one, slider_value_two, slider_value_three имеют правильные значения, потому что я напечатал и увидел их, поэтому я не понимаю, почему HoughLines () не принимает переданные значения.

1 Ответ

0 голосов
/ 22 апреля 2019

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

Вверху находится входное изображение, а внизу - конечный выход. На этом этапе меня просят просто создать две линии на обочине дороги, а на следующем шаге запрашивается окрашивание области между двумя линиями (как на фотографии).

...