c++ - 如何找到风力涡轮机叶片相对于水平假想轴形成的角度?

标签 c++ opencv image-processing rotation angle

一个理想的风力发电场将使所有涡轮机以相同的叶片角度*以类似的方式旋转。不同涡轮机的叶片以不同的速度旋转。因此,每个风力涡轮机的叶片角度都不同。考虑 4 台风力涡轮机的情况,每台风力涡轮机相距 100 米并形成 ө1、ө2、ө3 和 ө4 的叶片角,我们可以使用 OpenCV 通过使用合适的计算机视觉算法并考虑到每个涡轮机的叶片角考虑用于监控的网络摄像头的距离、位置和其他此类因素。这个想法是为了获得形成的叶片角度的准确值。

*叶片角度(此处)- 第一个叶片与假想水平轴之间形成的角度,沿逆时针方向测量。

我希望这能提供清晰度。

在 OpenCV 中,我计划了以下方法-

获取图像/帧-使用canny边缘检测-使用霍夫线变换寻找线-识别刀刃线-找到刀刃角度-转到下一帧。

我的问题是-我不知道如何在找到霍夫线后只识别 Blade 线。我知道概率 Hough 线将返回“线”,即检测到的所有线的终点。但是我怎么知道哪些线属于 Blade 呢? 我面临的另一个问题是,我应该如何精确地制作一条穿过轮毂的假想水平线来测量叶片角度。

另一种方法- 基本上我想要的是同步旋转并为此寻找叶片角度。另一种方法是 - 使用背景减法,找到并绘制所有 4 个涡轮机的轮廓。考虑一个涡轮机作为引用。将找到的所有其他涡轮机的轮廓与引用涡轮机进行比较,找出每个叶片的角度差异。但是我如何比较并找到它们之间的不同角度呢?任何代码片段都会有所帮助。

您对此有何看法?我是使用 openCV 的完全初学者,非常感谢任何帮助。非常感谢。

编辑:对所关注的角度 ө1 的粗略引用是此处的叶片角度:

img

角度的另一个引用,考虑到线不穿过叶片:

img

最佳答案

这是我想到的流程:

  1. 因为你的相机是静态的,你可以定义区域 仅在该区域裁剪(子矩阵)并检测边缘以应用 Houghtransform
  2. 因为你知道 Blade 的确切长度(由于静电 相机),您可以将 Houghlines 限制为 Blade 。
  3. 获取Houghlines后,需要获取平均线 在两条(几乎平行的)线之间(我认为 Blade 边缘不是 平行,所以它们在底部较厚,在底部变薄 tip) - 获得叶片的准确中心线。
  4. 之后你可以通过 (endPoint - 起点)。
  5. 现在您只需计算点积的 arcos vector 和水平线 vector (1,0) - 这是你的角度 在 Blade 和水平线之间。

关于c++ - 如何找到风力涡轮机叶片相对于水平假想轴形成的角度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42017386/

相关文章:

python - 如何在 python opencv 中完成/关闭轮廓?

image-processing - 在 Blazor WebAssembly 中使用 RequestImageFileAsync 时控制格式

c++ - 无法在 Eclipse Juno 8.1.1 CDT C++ 项目中添加静态库

c++ - 如何根据预处理器定义的宏关闭 C++ 库的子模块

python-3.x - 无法通过cv2.imread()在gcloud的tmp中读取图像,它不返回任何内容

java - 是否可以使用 apache POI 裁剪/创建缩略图

c - 高斯模糊、均值滤波器、卷积

c++ - 二进制搜索程序无法识别边界?

python - CMake 3.5中的链接器标志位置

python - OpenCV + 健身房复古 : Invalid number of channels in input image