前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[python opencv 计算机视觉零基础到实战] 十七、用鼠标画画

[python opencv 计算机视觉零基础到实战] 十七、用鼠标画画

作者头像
1_bit
发布2022-01-06 09:59:06
7890
发布2022-01-06 09:59:06
举报
文章被收录于专栏:我的知识小屋

一、学习目标

  1. 了解长轴和短轴参数
  2. 了解旋转角度参数
  3. 了解起始角度参数
  4. 了解终止角度参数

二、深入了解OpenCV的ellipse方法

2.1 纵横

椭圆的绘制方法在上一节中我们已经知道了是使用ellipse,ellipse的函数原型如下,为了清晰认识ellipse方法,在此使用了中文代替参数:

代码语言:javascript
复制
ellipse(image, 椭圆的中心坐标, 长轴和短轴, 旋转角度, 起始角度, 终止角度, color ,粗细)

我们依旧沿用上一节的代码,如下:

代码语言:javascript
复制
import cv2
import numpy as np

img=np.zeros((400,400,3), np.uint8)
cv2.ellipse(img, (200, 200), (170, 50), 0, 0, 360, (255, 255, 255), 3)

cv2.imshow("Image", img)
cv2.waitKey (0)
cv2.destroyAllWindows()

我们的ellipse方法如下:

代码语言:javascript
复制
cv2.ellipse(img, (200, 200), (170, 50), 0, 0, 360, (255, 255, 255), 3)

其中(200, 200)为圆心坐标,(170, 50)为长短轴,0, 0为旋转角度以及起始角度,360为终止角度。颜色和粗细分别为(255, 255, 255)以及3.我们我们先查看当前绘制出来的图形是什么样子的,结果如下:

那我们更改(170, 50)为(50, 170)呢?结果如下:

再次我们很清楚了(170, 50)中的170为横向长度,50为纵向长度,我们还可以将170,50改成170,10,这个时候应该可以更明显的看的出效果,应该170长度不变,10变得更扁了。结果如下:

我们更改170为100,应该它的横向长度也会变短,将170的10改为70的10,结果如下:

代码语言:javascript
复制
cv2.ellipse(img, (200, 200), (70, 10), 0, 0, 360, (255, 255, 255), 3)

我们继续按照以上代码更改数据来深入的理解ellipse方法。这次我们更改选择角度,代码如下:

代码语言:javascript
复制
cv2.ellipse(img, (200, 200), (70, 10), 0, 0, 360, (255, 255, 255), 3)

旋转角度

将第一个0,旋转角度改为10,看看有什么效果:

代码语言:javascript
复制
cv2.ellipse(img, (200, 200), (70, 10), 10, 0, 360, (255, 255, 255), 3)

改为-10,结果如下:

这个时候可以得出,这个该旋转角度如图所示,是指在绘制这个圆的时候的选择方向:

我们现在将绘制角度0改为180:

代码语言:javascript
复制
cv2.ellipse(img, (200, 200), (70, 10), 0, 180, 360, (255, 255, 255), 3)

得到的结果如下:

绘制角度

再将180改为90,结果如下:

这个时候得知,这个绘制角度是指原型在右下角与水平形成的角的起始绘制角度位置,如下图所示:

起始绘制角度

这个时候就很清楚这个起始绘制角度的用法了。接下来我们查看终止角度的用法。我们将起始绘制角度置零,并且将终止角度改成180,代码如下:

代码语言:javascript
复制
cv2.ellipse(img, (200, 200), (70, 10), 0, 0, 180, (255, 255, 255), 3)

结果如下:

这时再将该结束绘制角度更改为270,结果如下:

这个时候就很明白了,原型与水平线形成的平角开始,顺时针绘制,绘制180则到180度位置停止绘制,绘制270则到270度开始停止,如下图所示:

何绘制半个圆

那如何绘制半个圆呢?这个很简单,只需要保持横纵距离长短一致,并且绘制的角度为180即可:

代码语言:javascript
复制
cv2.ellipse(img, (200, 200), (70, 70), 0, 0, 180, (255, 255, 255), 1)

可是这个时候的半圆并不好看:

感觉只有一个弧,那怎么办呢?很简单,我们进行填充就可以了,如下:

代码语言:javascript
复制
cv2.ellipse(img, (200, 200), (70, 70), 0, 0, 180, (255, 255, 255), -1)

这个时候将线段的长度更改为负数就可以了,结果如下:

该系列首发于ebaina

三、总结

  1. 了解了长轴和短轴参数跟纵横的关系
  2. 了解旋转角度参数绘制圆形
  3. 了解起始角度参数绘制圆形
  4. 了解终止角度参数绘制圆形
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/01/29 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、学习目标
  • 二、深入了解OpenCV的ellipse方法
    • 2.1 纵横
      • 旋转角度
        • 绘制角度
          • 起始绘制角度
            • 何绘制半个圆
              • 三、总结
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档