Предоставляет ли OpenCV функцию рисования и построения графика?
Я нашел эту ссылку Шервином Эмами http://www.shervinemami.info/graphs.html, который был создан сам.
Предоставляет ли OpenCV функцию рисования и построения графика?
Я нашел эту ссылку Шервином Эмами http://www.shervinemami.info/graphs.html, который был создан сам.
Из того, что я вижу, OpenCV не предоставляет функцию как часть своего API для рисования и построения графиков в виде cvDrawPlot (данные cvMat *, другие аргументы...).
Большинство графических образцов, просмотренных с использованием только вызовов функций OpenCV, включая создание графика, как если бы это было любое другое изображение с cvCreateImage
.
Затем они перебирают данные и заполняют изображение примитивами OpenCV, такими как cvRectangle
, cvLine
, cvCircle
и cvPoint
.
Затем они вызывают cvShowImage
для отображения созданного изображения изображения.
Если найденная вами библиотека делает то, что вы хотите, вы можете ее использовать.
Вы также можете записать данные в файл и вызвать внешний инструмент построения графиков, например gnuplot или функции вызова, которые рисуют и строят графики с использованием других библиотек визуализации или построения графиков, таких как VTK или plplot.
Другая библиотека, отличная от той, которую вы нашли, cvplot.
вы можете попробовать следующее: https://code.google.com/p/cvplot/
Функция построения стиля Matlab для OpenCV, основанная на highgui. Кстати, это только для С++.
С открытым исходным кодом.
Довольно грубый, но по-своему подход, будет связан с построением линейного графика на 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 для просмотра графика
Посмотрите https://github.com/leonardvandriel/cvplot. Вы можете строить графики с небольшой конфигурацией и поддерживать несколько графиков в одном окне. (Примечание: вопиющее самореклама).