很高兴能够帮您解决这个问题,以下是一份用C++代码调用OpenCV库生成实时动态折线图的示例代码:

#include <opencv2/opencv.hpp>
#include <vector>

using namespace cv;
using namespace std;

int main()
{
    // 创建一个窗口
    namedWindow("Dynamic Line Chart", WINDOW_NORMAL);

    // 定义坐标轴和曲线颜色
    Scalar axisColor(0, 255, 0);
    Scalar curveColor(255, 0, 0);

    // 定义坐标轴和曲线粗细
    int axisThickness = 2;
    int curveThickness = 2;

    // 定义坐标轴长度和刻度尺寸
    int axisLength = 400;
    int tickSize = 5;

    // 定义曲线数据
    vector<Point> curveData;

    // 循环生成折线图
    for (;;)
    {
        // 生成随机数据
        int x = rand() % axisLength;
        int y = rand() % axisLength;
        Point point(x, y);

        // 添加数据到曲线数据向量中
        curveData.push_back(point);

        // 如果曲线数据向量长度超过坐标轴长度,则删除第一个点
        if (curveData.size() > axisLength)
        {
            curveData.erase(curveData.begin());
        }

        // 创建一个空的图像
        Mat chart = Mat::zeros(Size(axisLength, axisLength), CV_8UC3);

        // 绘制坐标轴
        line(chart, Point(0, axisLength / 2), Point(axisLength, axisLength / 2), axisColor, axisThickness);
        line(chart, Point(axisLength / 2, 0), Point(axisLength / 2, axisLength), axisColor, axisThickness);

        // 绘制刻度尺
        for (int i = 0; i < axisLength; i += tickSize)
        {
            line(chart, Point(i, axisLength / 2 - tickSize), Point(i, axisLength / 2 + tickSize), axisColor, axisThickness);
            line(chart, Point(axisLength / 2 - tickSize, i), Point(axisLength / 2 + tickSize, i), axisColor, axisThickness);
        }

        // 绘制曲线
        for (int i = 1; i < curveData.size(); i++)
        {
            line(chart, curveData[i - 1], curveData[i], curveColor, curveThickness);
        }

        // 显示图像
        imshow("Dynamic Line Chart", chart);

        // 等待100毫秒
        waitKey(100);
    }

    return 0;
}

这段代码会生成一个窗口,其中包含有横纵坐标轴和实时动态生成的折线图。在每个循环迭代中,会生成随机数据并将其添加到曲线数据向量中,然后绘制折线图并在窗口中显示它。请注意,在循环迭代中使用 waitKey()函数等待100毫秒,以便图像能够实时更新。


原文地址: https://www.cveoy.top/t/topic/zAW 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录