Animation 如何使用OpenCV创建动画数字刻度盘/指示器?

Animation 如何使用OpenCV创建动画数字刻度盘/指示器?,animation,opencv,gdi+,Animation,Opencv,Gdi+,我必须开发一个强度计,它将基本上显示均匀曝光图像的平均强度水平。随着相机焦点的改变,指针开始移动到以下显示中的正确值: 同时,一个文本字段也将以数字形式显示精确的强度值,如图所示 到目前为止,我已经能够捕获图像并将其强度值存储在文本文件中。现在我要冲洗这个动画图像。我从未使用OpenCV制作过任何动画,所以我想知道如何使用OpenCV制作此类动画 这里有什么指示吗 我的完整应用程序基于Windows窗体(C++),我正在为其他应用程序使用OpenCV 图像处理任务(此处未列出) 注:仪表将基本

我必须开发一个强度计,它将基本上显示均匀曝光图像的平均强度水平。随着相机焦点的改变,指针开始移动到以下显示中的正确值:

同时,一个文本字段也将以数字形式显示精确的强度值,如图所示

到目前为止,我已经能够捕获图像并将其强度值存储在文本文件中。现在我要冲洗这个动画图像。我从未使用OpenCV制作过任何动画,所以我想知道如何使用OpenCV制作此类动画

这里有什么指示吗

我的完整应用程序基于Windows窗体(C++),我正在为其他应用程序使用OpenCV
图像处理任务(此处未列出)


注:仪表将基本显示均匀暴露区域的平均强度水平

更新

我这里有一些解决办法

通过一些研究,我现在知道了算法:

θ=A*I

在哪里,

θ=指针旋转的角度

A=比例系数

I=强度水平

旋转角度将与强度水平成正比

所以现在我打算这样做:

1-使用cvNamedWindow创建新窗口

2-显示图像的静态部分,即图中的刻度盘,它不会改变

3-显示指向中间的垂直指针

4-获得强度等级I的值,并应用上述公式计算θ

5-根据上面计算的角度,使用OpenCv函数旋转指针


有人能证实我的理解吗?特别是请告诉我旋转指针最快的功能是什么?如果你能进一步改进,请告诉我

我建议两种选择

  • 使用库:类似于我在评论中链接的东西
  • 如果你真的想在opencv中画画,请发布你目前掌握的代码,以便答案可以集中在你卡住的部分
  • 我还没有在opencv中完成绘图,但我想我找到了您需要的部分:

    • 简单图像加载(如imread或imread)
    • 绘图功能(例如,绘图针
    • 似乎您可以使用简单的cvShowImage快速更新图像
    • 将输入强度值转换为fillPoly的一组点的方程式
    请更新问题,提供更多关于您卡住了哪些部件的详细信息。如果我链接到多个版本的opencv文档,我很抱歉。我想这些基本功能不重要

    方程更新:

    我根本没有测试过这个,但它看起来很有趣:

    假设:
    • 中心左侧==>180度
    • 中心右侧==>0度
    • 图像原点位于左上角
    • 像素顺序为[列,行](即[x,y])
    配置变量:
    • min_v==>表盘左边缘的值
    • max_v==>刻度盘右边缘的值
    • arc_size==>要用于强度范围的圆顶部的度数
    • 半径==>从表盘顶部到虚拟圆中心的距离(半径越大==>表盘越平坦)
    • top_padding==>当笔直指向上时,从静态图像顶部到针的距离
    • 针\u l==>要绘制的针/多边形的长度
    输入变量:
    • 针_v==>针所代表的值
    输出变量:
    • 针_end==>针的外部点(根据图像坐标)
    • 针_start==>针的内部点,以图像坐标表示
    计算: 为了便于阅读:

    left_a =  90 + (arc_size / 2)             (angle for min_v)
    right_a = 90 - (arc_size / 2)             (angle for max_v)
    value_range = (max_v - min_v)
    
    获取针的角度

    value_proportion = (needle_v - min_v) / value_range
    needle_a = left_a - (value_proportion * arc_size)
    
    获取圆的虚拟中心(例如,示例图像中的圆心位于图像外部)

    获取针的起点和终点

    needle_end[x] = dial_origin[x] - radius * cos(needle_a)
    needle_end[y] = dial_origin[y] - radius * sin(needle_a)
    needle_start[x] = dial_origin[x] - (radius - needle_l) * cos(needle_a)
    needle_start[y] = dial_origin[x] - (radius - needle_l) * sin(needle_a)
    

    我建议两种选择

  • 使用库:类似于我在评论中链接的东西
  • 如果你真的想在opencv中画画,请发布你目前掌握的代码,以便答案可以集中在你卡住的部分
  • 我还没有在opencv中完成绘图,但我想我找到了您需要的部分:

    • 简单图像加载(如imread或imread)
    • 绘图功能(例如,绘图针
    • 似乎您可以使用简单的cvShowImage快速更新图像
    • 将输入强度值转换为fillPoly的一组点的方程式
    请更新问题,提供更多关于您卡住了哪些部件的详细信息。如果我链接到多个版本的opencv文档,我很抱歉。我想这些基本功能不重要

    方程更新:

    我根本没有测试过这个,但它看起来很有趣:

    假设:
    • 中心左侧==>180度
    • 中心右侧==>0度
    • 图像原点位于左上角
    • 像素顺序为[列,行](即[x,y])
    配置变量:
    • min_v==>表盘左边缘的值
    • max_v==>刻度盘右边缘的值
    • arc_size==>要用于强度范围的圆顶部的度数
    • 半径==>从表盘顶部到虚拟圆中心的距离(半径越大==>表盘越平坦)
    • top_padding==>当笔直指向上时,从静态图像顶部到针的距离
    • 针\u l==>要绘制的针/多边形的长度
    输入变量
    needle_end[x] = dial_origin[x] - radius * cos(needle_a)
    needle_end[y] = dial_origin[y] - radius * sin(needle_a)
    needle_start[x] = dial_origin[x] - (radius - needle_l) * cos(needle_a)
    needle_start[y] = dial_origin[x] - (radius - needle_l) * sin(needle_a)