实现椭圆结构元素

时间:2017-06-06 14:13:27

标签: c++ opencv image-processing rotation ellipse

我想使用 OpenCV 实现以下功能(我将在帖子底部发布我的尝试)。我知道OpenCV有这样的功能,但我想尝试自己编写。

在宽度为width和高度为height的图像(Mat)(坐标系位于左上角,因为它是图像)中,我想显示已填充< / strong> ellipse具有以下属性:

  • 它应该以{{1​​}}

  • 为中心
  • 图像应为二进制,因此对应椭圆的点的值应为1,其他点应为0

  • 椭圆应该围绕原点旋转(width/2, height/2)弧度(或度,这并不重要,我可以转换)

  • 椭圆:半长轴参数为angle,半短轴参数为a,这两个参数也代表图片中这些轴的大小,因此&#34 ;无论如何&#34; bwidth,椭圆的主轴大小为height,短轴的大小为2*a

好的,所以为了我的目的,我找到了一个与此类似的方程式(https://math.stackexchange.com/a/434482/403961)。我的代码如下......它似乎在旋转方面做得很好,但遗憾的是,根据旋转角度,SIZE(长轴,不确定次要)明显增加/减少,这是不正常的因为我希望它具有相同的尺寸,与旋转角度无关。

注意当角度为45或-45度时,看起来最大尺寸,对于像-90,0,90这样的角度,最小尺寸。

代码:

2*b

1 个答案:

答案 0 :(得分:1)

令人讨厌的错字潜入了你的不平等。第一个加数必须是

sqr((x - center.x) * cos(angle) + (y - center.y) * sin(angle)) / sqr(a)

请注意加号符号,而不是减号