Подтвердить что ты не робот

График рисования и построения графика в OpenCV

Предоставляет ли OpenCV функцию рисования и построения графика?

Я нашел эту ссылку Шервином Эмами http://www.shervinemami.info/graphs.html, который был создан сам.

4b9b3361

Ответ 1

Из того, что я вижу, OpenCV не предоставляет функцию как часть своего API для рисования и построения графиков в виде cvDrawPlot (данные cvMat *, другие аргументы...).

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

Затем они перебирают данные и заполняют изображение примитивами OpenCV, такими как cvRectangle, cvLine, cvCircle и cvPoint.

Затем они вызывают cvShowImage для отображения созданного изображения изображения.

Если найденная вами библиотека делает то, что вы хотите, вы можете ее использовать.

Вы также можете записать данные в файл и вызвать внешний инструмент построения графиков, например gnuplot или функции вызова, которые рисуют и строят графики с использованием других библиотек визуализации или построения графиков, таких как VTK или plplot.

Другая библиотека, отличная от той, которую вы нашли, cvplot.

Ответ 2

вы можете попробовать следующее: https://code.google.com/p/cvplot/

Функция построения стиля Matlab для OpenCV, основанная на highgui. Кстати, это только для С++.

С открытым исходным кодом.

Ответ 3

Довольно грубый, но по-своему подход, будет связан с построением линейного графика на cv:: Mat image:

template <typename T>
cv::Mat plotGraph(std::vector<T>& vals, int YRange[2])
{

    auto it = minmax_element(vals.begin(), vals.end());
    float scale = 1./ceil(*it.second - *it.first); 
    float bias = *it.first;
    int rows = YRange[1] - YRange[0] + 1;
    cv::Mat image = Mat::zeros( rows, vals.size(), CV_8UC3 );
    image.setTo(0);
    for (int i = 0; i < (int)vals.size()-1; i++)
    {
        cv::line(image, cv::Point(i, rows - 1 - (vals[i] - bias)*scale*YRange[1]), cv::Point(i+1, rows - 1 - (vals[i+1] - bias)*scale*YRange[1]), Scalar(255, 0, 0), 1);
    }

    return image;
}

Пример использования:

vector<int> numbers(100);
std::iota (numbers.begin(), numbers.end(), 0);

int range[2] = {0, 100};
cv::Mat lineGraph = plotGraph(numbers, range);

Затем можно использовать imshow или Image Watch для просмотра графика

Ответ 4

Посмотрите https://github.com/leonardvandriel/cvplot. Вы можете строить графики с небольшой конфигурацией и поддерживать несколько графиков в одном окне. (Примечание: вопиющее самореклама).