你好,我需要你帮我用C++代码调用OpenCV库 写一段关于实时动态生成有横纵坐标轴的折线图的代码
很高兴能够帮您解决这个问题,以下是一份用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 著作权归作者所有。请勿转载和采集!