Animation 如何使用OpenCV创建动画数字刻度盘/指示器?
我必须开发一个强度计,它将基本上显示均匀曝光图像的平均强度水平。随着相机焦点的改变,指针开始移动到以下显示中的正确值: 同时,一个文本字段也将以数字形式显示精确的强度值,如图所示 到目前为止,我已经能够捕获图像并将其强度值存储在文本文件中。现在我要冲洗这个动画图像。我从未使用OpenCV制作过任何动画,所以我想知道如何使用OpenCV制作此类动画 这里有什么指示吗 我的完整应用程序基于Windows窗体(C++),我正在为其他应用程序使用OpenCVAnimation 如何使用OpenCV创建动画数字刻度盘/指示器?,animation,opencv,gdi+,Animation,Opencv,Gdi+,我必须开发一个强度计,它将基本上显示均匀曝光图像的平均强度水平。随着相机焦点的改变,指针开始移动到以下显示中的正确值: 同时,一个文本字段也将以数字形式显示精确的强度值,如图所示 到目前为止,我已经能够捕获图像并将其强度值存储在文本文件中。现在我要冲洗这个动画图像。我从未使用OpenCV制作过任何动画,所以我想知道如何使用OpenCV制作此类动画 这里有什么指示吗 我的完整应用程序基于Windows窗体(C++),我正在为其他应用程序使用OpenCV 图像处理任务(此处未列出) 注:仪表将基本
图像处理任务(此处未列出)
注:仪表将基本显示均匀暴露区域的平均强度水平 更新 我这里有一些解决办法 通过一些研究,我现在知道了算法: θ=A*I 在哪里, θ=指针旋转的角度 A=比例系数 I=强度水平 旋转角度将与强度水平成正比 所以现在我打算这样做: 1-使用cvNamedWindow创建新窗口 2-显示图像的静态部分,即图中的刻度盘,它不会改变 3-显示指向中间的垂直指针 4-获得强度等级I的值,并应用上述公式计算θ 5-根据上面计算的角度,使用OpenCv函数旋转指针
有人能证实我的理解吗?特别是请告诉我旋转指针最快的功能是什么?如果你能进一步改进,请告诉我 我建议两种选择
- 简单图像加载(如imread或imread)
- 绘图功能(例如,绘图针
- 似乎您可以使用简单的cvShowImage快速更新图像
- 将输入强度值转换为fillPoly的一组点的方程式
- 中心左侧==>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)
我建议两种选择
- 简单图像加载(如imread或imread)
- 绘图功能(例如,绘图针
- 似乎您可以使用简单的cvShowImage快速更新图像
- 将输入强度值转换为fillPoly的一组点的方程式
- 中心左侧==>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)