Как выправить изогнутую линию с помощью OpenCV? - PullRequest
0 голосов
/ 24 мая 2019

У меня есть изображение с изогнутой линией, как это:

enter image description here

Я не смог найти метод для выпрямления изогнутой линии с использованием OpenCV. Это похоже на этот пост Выпрямление изогнутого контура , но мой вопрос специфичен для кодирования с использованием opencv (в C ++ лучше).

Пока что я могу только найти контур изогнутой линии.

enter image description here

int main()
{
    Mat src; Mat src_gray;
    src = imread("D:/2.jpg");
    cvtColor(src, src_gray, COLOR_BGR2GRAY);
    cv::blur(src_gray, src_gray, Size(1, 15));

    Canny(src_gray, src_gray, 100, 200, 3);
    /// Find contours   
    vector<vector<Point> > contours;
    vector<Vec4i> hierarchy;
    RNG rng(12345);
    findContours(src_gray, contours, hierarchy, CV_RETR_TREE, CV_CHAIN_APPROX_SIMPLE, Point(0, 0));
    /// Draw contours
    Mat drawing = Mat::zeros(src_gray.size(), CV_8UC3);
    for (int i = 0; i < contours.size(); i++)
    {
        drawContours(drawing, contours, i, (255), 1, 8, hierarchy, 0, Point());
    }

    imshow("Result window", drawing);
    imwrite("D:/C_Backup_Folder/Ivan_codes/VideoStitcher/result/2_res.jpg", drawing);

    cv::waitKey();
    return 0;
}

Но я понятия не имею, как определить, какая линия изогнута и нет, и как ее выпрямить. Является ли это возможным? Любая помощь будет оценена.

1 Ответ

0 голосов
/ 28 мая 2019

Вот мое предложение:

Прежде всего, измените размер вашего изображения в намного большее изображение (например, в 5 раз больше). Затем сделайте то, что вы делали раньше, и получите контуры. Найдите самый правый пиксель каждого контура, а затем осмотрите все пиксели этого контура и посчитайте горизонтальное расстояние каждого пикселя до самого правого пикселя и сделайте сдвиг для этой строки (всей строки). Этот метод делает сдвиг вправо на некоторые строки и сдвиг влево на другие.

Если у вас несколько контуров, рассчитайте это значение сдвига для каждого из них в каждой отдельной строке и вычислите их «среднее» значение, а также выполните сдвиг в соответствии с этим средним значением для каждой строки.

В конце измените размер вашего изображения. Это самая простая и быстрая вещь, о которой я мог подумать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...