在OpenCV中绘制和绘制图形

问题描述 投票:11回答:4

OpenCV是否提供了如何绘制和绘制图形的功能?

我找到了由他自己创建的Shervin Emami http://www.shervinemami.info/graphs.html的链接。

opencv
4个回答
8
投票

从我所看到的,OpenCV没有提供一个函数作为其绘制和绘制图形的API的一部分,以cvDrawPlot(cvMat * data,其他args ...)的形式。

大多数绘图样本仅使用OpenCV函数调用,包括使用cvCreateImage创建任何其他图像。

然后他们迭代数据并用OpenCV primites填充图像,如cvRectanglecvLinecvCirclecvPoint

然后他们调用cvShowImage来显示创建的情节图像。

如果您找到的库符合您的要求,那么您可以使用它。

您还可以将数据写入文件并调用外部绘图工具(如gnuplot)或调用函数,使用其他可视化或绘图库(如VTK或plplot)绘制和绘制图形。

您找到的另一个图书馆是cvplot


11
投票

你可以试试这个:https://code.google.com/p/cvplot/

基于highgui的OpenCV的Matlab样式绘图函数。顺便说一句,它只适用于C ++。

它是开源的。


4
投票

一个相当粗糙但是自己动手的方法,需要在cv :: Mat图像上绘制线图:

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);

然后可以使用imshowImage Watch查看图表


2
投票

看看https://github.com/leonardvandriel/cvplot。您可以绘制配置较少的图形,并在单个窗口中支持多个图形。 (注:公然自我推销)。

© www.soinside.com 2019 - 2024. All rights reserved.