opencv进阶02-在图像上绘制多种几何图形

这篇具有很好参考价值的文章主要介绍了opencv进阶02-在图像上绘制多种几何图形。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

OpenCV 提供了方便的绘图功能,使用其中的绘图函数可以绘制直线、矩形、圆、椭圆等多种几何图形,还能在图像中的指定位置添加文字说明。

OpenCV 提供了绘制直线的函数 cv2.line()、绘制矩形的函数 cv2.rectangle()、绘制圆的函数cv2.circle()、绘制椭圆的函数cv2.ellipse()、绘制多边形的函数 cv2.polylines()、在图像内添加文字的函数 cv2.putText()等多种绘图函数。

这些绘图函数有一些共有的参数,主要用于设置源图像、颜色、线条属性等。下面对这些共有参数做简单的介绍。

  • img:在其上面绘制图形的载体图像(绘图的容器载体,也称为画布、画板)。
  • color:绘制形状的颜色。通常使用 BGR 模型表示颜色,例如,(0, 255, 0)表示绿色。对于灰度图像,只能传入灰度值。需要注意,颜色通道的顺序是 BGR,而不是 RGB。
  • thickness:线条的粗细。默认值是 1,如果设置为-1,表示填充图形(即绘制的图形是实心的)。
  • lineType:线条的类型,默认是 8 连接类型。lineType 参数的值及说明如表 19-1 所示。

opencv进阶02-在图像上绘制多种几何图形,opencv 进阶,opencv,人工智能,计算机视觉,python

  • shift:数据精度。该参数用来控制数值(例如圆心坐标等)的精度,一般情况下不需要设置。

绘制直线

OpenCV 提供了函数 cv2.line()用来绘制直线(线段)。该函数的语法格式为:

img = cv2.line( img, pt1, pt2, color[, thickness[, lineType ]])

式中:

  • 参数 img、color、thickness、lineType 的含义如前面的说明所示。
  • pt1 表示线段的第 1 个点(起点)。
  • pt2 表示线段的第 2 个点(终点)。

示例:使用 cv2.line()函数在一个黑色背景图像内绘制三条线段。

import numpy as np
import cv2
n = 300  # 图像尺寸

# 创建一个空白的彩色图像,尺寸为(n+1) x (n+1)3通道(RGB)
img = np.zeros((n+1, n+1, 3), np.uint8)

# 在图像上绘制蓝色直线,起点为(0,0),终点为(n,n),线宽为3
img = cv2.line(img, (0, 0), (n, n), (255, 0, 0), 3)

# 在图像上绘制绿色直线,起点为(0,100),终点为(n,100),线宽为1
img = cv2.line(img, (0, 100), (n, 100), (0, 255, 0), 1)

# 在图像上绘制红色直线,起点为(100,0),终点为(100,n),线宽为6
img = cv2.line(img, (100, 0), (100, n), (0, 0, 255), 6)

winname = 'line-demo'  # 窗口名称

# 创建一个窗口并设置窗口名字
cv2.namedWindow(winname)

# 在窗口中显示图像
cv2.imshow(winname, img)

# 等待键盘按键,0表示无限等待
cv2.waitKey(0)
cv2.destroyAllWindows()

运行结果:

opencv进阶02-在图像上绘制多种几何图形,opencv 进阶,opencv,人工智能,计算机视觉,python

绘制矩形

OpenCV 提供了函数 cv2.rectangle()用来绘制矩形。该函数的语法格式为:

img = cv2.rectangle( img, pt1, pt2, color[, thickness[, lineType]] )

式中:

  • 参数 img、color、thickness、lineType 的含义如前面的说明所示。
  • pt1 为矩形顶点。
  • pt2 为矩形中与 pt1 对角的顶点。

使用函数 cv2.rectangle()在一个白色背景图像内绘制一个实心矩形和空心矩形。

代码如下:

import numpy as np
import cv2

n = 300  # 图像尺寸

# 创建一个白色背景的彩色图像,尺寸为n x n,3通道(RGB)
img = np.ones((n, n, 3), np.uint8) * 255

# 在图像上绘制填充的红色矩形,左上角坐标为(50, 50),右下角坐标为(n-100, n-50),颜色为红色,厚度为-1表示填充, 0表示不填充
img = cv2.rectangle(img, (50, 50), (n-100, n-50), (0, 0, 255), -1)

winname = 'rect-shixin'  # 窗口名称

# 创建一个窗口并设置窗口名字
cv2.namedWindow(winname)

# 在窗口中显示图像
cv2.imshow(winname, img)

# 等待键盘按键,0表示无限等待
cv2.waitKey(0)

# 关闭所有打开的窗口
cv2.destroyAllWindows()

opencv进阶02-在图像上绘制多种几何图形,opencv 进阶,opencv,人工智能,计算机视觉,python
img = cv2.rectangle(img, (50, 50), (n-100, n-50), (0, 0, 255), -1)

其中的 -1 改成0,就可以画一个非实心的矩形框,效果如下。

opencv进阶02-在图像上绘制多种几何图形,opencv 进阶,opencv,人工智能,计算机视觉,python

绘制圆形

OpenCV 提供了函数 cv2.circle()用来绘制圆。该函数的语法格式为:

img = cv2.circle( img, center, radius, color[, thickness[, lineType]] )

式中:

  • 参数 img、color、thickness、lineType 的含义如前面的说明所示。

  • center 为圆心。

  • radius 为半径

使用函数 cv2.circle()在一个白色背景图像内绘制一组同心圆。

代码如下:

import numpy as np
import cv2
d = 400
img = np.ones((d,d,3),dtype="uint8")*255
(centerX,centerY) = (round(img.shape[1] / 2),round(img.shape[0] / 2))
# 将图像的中心作为圆心,实际值为 d/2
red = (0,0,255) # 设置白色变量
for r in range(5,round(d/2),12):
 cv2.circle(img,(centerX,centerY),r,red,3)
 # circle(载体图像,圆心,半径,颜色)
cv2.imshow("Demo19.3",img)
cv2.waitKey(0)
cv2.destroyAllWindows()

运行效果:

opencv进阶02-在图像上绘制多种几何图形,opencv 进阶,opencv,人工智能,计算机视觉,python

绘制椭圆

OpenCV 提供了函数 cv2.ellipse()用来绘制椭圆。该函数的语法格式为:
img=cv2.ellipse(img, center, axes, angle, startAngle, endAngle, color[,
thickness[, lineType]])
式中:

  • 参数 img、color、thickness、lineType 的含义如前面的说明所示。
  • center 为椭圆的圆心坐标。
  • axes 为轴的长度。
  • angle 为偏转的角度。
  • startAngle 为圆弧起始角的角度。
  • endAngle 为圆弧终结角的角度。

使用函数 cv2.ellipse()在一个白色背景图像内随机绘制一组空心椭圆。

import numpy as np
import cv2
d = 400
img = np.ones((d,d,3),dtype="uint8")*255
# 生成白色背景
center=(round(d/2),round(d/2))
# 注意数值类型,不可以使用语句 center=(d/2,d/2)
size=(100,200)
# 轴的长度
for i in range(0,10):
 angle = np.random.randint(0,361)
 # 偏移角度
 color = np.random.randint(0,high = 256,size = (3,)).tolist()
 # 生成随机颜色,3[0,256)的随机数
 thickness = np.random.randint(1,9)
 cv2.ellipse(img, center, size, angle, 0, 360, color,thickness)
cv2.imshow("demo-tuoyuan",img)
cv2.waitKey(0)
cv2.destroyAllWindows()

运行效果:
opencv进阶02-在图像上绘制多种几何图形,opencv 进阶,opencv,人工智能,计算机视觉,python

绘制多边形

OpenCV 提供了函数 cv2.polylines()用来绘制多边形。该函数的语法格式为:

img = cv2.polylines( img, pts, isClosed, color[, thickness[,
lineType[, shift]]])

式中:

  • 参数 img、color、thickness、lineType 和 shift 的含义如前面的说明所示。
  • pts 为多边形的各个顶点。
  • isClosed 为闭合标记,用来指示多边形是否是封闭的。若该值为 True,则将最后一个点与第一个点连接,让多边形闭合;否则,仅仅将各个点依次连接起来,构成一条曲线。

在使用函数 cv2.polylines()绘制多边形时,需要给出每个顶点的坐标。这些点的坐标构建了一个大小等于“顶点个数12”的数组,这个数组的数据类型必须为 numpy.int32。

使用函数 cv2.polylines()在一个白色背景图像内绘制一个多边形。

import numpy as np
import cv2
d = 400  # 图像尺寸

# 创建一个白色背景的彩色图像,尺寸为d x d,3通道(RGB)
img = np.ones((d, d, 3), dtype="uint8") * 255

# 生成多边形的各个顶点坐标
pts = np.array([[200, 50], [300, 200], [200, 350], [100, 200]], np.int32)

# 重新整形顶点数组,将其变为顶点数 x 1 x 2 的形状
pts = pts.reshape((-1, 1, 2))

# 使用 cv2.polylines() 函数绘制多边形
# 第一个参数为图像,第二个参数为顶点数组,第三个参数为True表示封闭多边形,颜色为绿色,线宽为8
cv2.polylines(img, [pts], True, (0, 255, 0), 8)
cv2.imshow("duobianxing",img)
cv2.waitKey(0)
cv2.destroyAllWindows()

opencv进阶02-在图像上绘制多种几何图形,opencv 进阶,opencv,人工智能,计算机视觉,python

函数 cv2.polylines()中的第 3 个参数 isClosed 是闭合标记,将该值设置为 False 时,仅仅将
各个顶点用线段连接,多边形是不封闭的。此时的代码为:

cv2.polylines(img,[pts],False,(0,255,0),8)

效果如下:

opencv进阶02-在图像上绘制多种几何图形,opencv 进阶,opencv,人工智能,计算机视觉,python

在图形上绘制文字

OpenCV 提供了函数 cv2.putText()用来在图形上绘制文字。该函数的语法格式为:

img=cv2.putText(img, text, org, fontFace, fontScale, color[,
thickness[, lineType[, bottomLeftOrigin]]])

式中:

  • 参数 img、color、thickness、lineType 和 shift 的含义如前面的说明所示。
  • text 为要绘制的字体。
  • org 为绘制字体的位置,以文字的左下角为起点。
  • fontFace 表示字体类型,其参数类型及含义如表 19-2 所示。
  • fontScale 表示字体大小。
  • bottomLeftOrigin 用于控制文字的方向。默认值为 False,当设置为 True 时,文字是垂直镜像的效果。

opencv进阶02-在图像上绘制多种几何图形,opencv 进阶,opencv,人工智能,计算机视觉,python

使用函数 cv2.putText()在一个白色背景图像内绘制文字。

代码如下:

import numpy as np
import cv2

d = 400  # 图像尺寸

# 创建一个白色背景的彩色图像,尺寸为d x d,3通道(RGB)
img = np.ones((d, d, 3), dtype="uint8") * 255

# 定义字体
font = cv2.FONT_HERSHEY_SIMPLEX


# 在图像上绘制红色的 "OpenCV" 文本,位置同样为(0, 200),字体大小为3,线宽为5
cv2.putText(img, 'OpenCV', (0, 200), font, 3, (0, 0, 255), 5)

# 创建一个窗口并显示图像
cv2.imshow("weizi", img)

cv2.waitKey(0)
cv2.destroyAllWindows()

该段程序在图像 img 中使用函数 cv2.putText()绘制了文字
“OpenCV”。

opencv进阶02-在图像上绘制多种几何图形,opencv 进阶,opencv,人工智能,计算机视觉,python文章来源地址https://www.toymoban.com/news/detail-656298.html

到了这里,关于opencv进阶02-在图像上绘制多种几何图形的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【matplotlib基础】--几何图形

    除了绘制各类分析图形(比如柱状图,折线图,饼图等等)以外, matplotlib 也可以在画布上任意绘制各类几何图形。 这对于计算机图形学、几何算法和计算机辅助设计等领域非常重要。 matplitlib 中的 patches 类提供了丰富的几何对象, 本篇抛砖引玉,介绍其中几种常用的几何

    2024年02月08日
    浏览(35)
  • 计算机图形学:二维图形的几何变换(算法原理及代码实现)

    对于一个二维图形作平移、旋转、放缩变换,可以转换为在二维坐标系中图形的所有点分别可以对应到在x,y轴方向分别平移tx,ty(平移)、绕一点旋转固定的角(旋转)、在x,y轴方向分别放缩sx,sy倍。 对于变换的原理,只需要将原图形的点通过极坐标或者相加、相乘,再

    2024年02月11日
    浏览(27)
  • 图形几何学——圆形:圆弧与曲率

    A、B、C分别是参考线的某三个连续的离散点,abc分别是其对边。根据三角形外接圆相关性质,通过作三条边的中垂线的交点可以求得三角形的外接圆心。连接CO并延长交圆周于点D,由于 近似认为 ∣ P 1 ⃗ ∣ = ∣ P 2 P 3 ⃗ ∣ = d s |vec{P_1}| = |vec{P_2P_3}| = ds ∣ P 1 ​ ​ ∣ = ∣

    2024年04月27日
    浏览(52)
  • Procedural Mesh: 创建复杂的3D几何图形

    Procedural Mesh 是一个用于创建复杂3D几何图形的开源库,由 Morten Nobel 开发并维护。它允许开发者通过程序化的方式生成各种形状和结构,无需手动设计每个顶点和面。 Procedural Mesh 提供了一系列函数和工具,可以帮助开发者轻松地生成自定义的3D网格。这些功能包括: 基础形状

    2024年03月15日
    浏览(28)
  • 几何引擎 & 约束求解器 & 3D仿真物理引擎 & 图形引擎

    四大技术图谱就像四座护法金刚,形成了深不可测的技术鸿沟。这对于任何一个工业软件企业,十年发展的沉淀,那还只是开始。这条路,太漫长了。 Software Vendor Domain 3D-kernel 4MCAD IntelliCAD 4M S.A., Greece CAD, AEC Open CASCADE Technology Adams MSC Software, USA CAE Parasolid ADEM ADEM, Russia-Israel

    2024年02月08日
    浏览(27)
  • CG3-v2.0-图形几何变换

    (1) 理解几何变换基本原理, 掌握平移、旋转、缩放变换的方法; (2) 根据平移算法原理补全translation、scale、rotation_x、rotation_y和rotation_z函数; (3) 根据几何变换基本原理,将main函数中的translation、scale、rotation_z参数补充完整。

    2024年02月08日
    浏览(40)
  • 图形编辑器开发:一些会用到的简单几何算法

    大家好,我是前端西瓜哥。 开发图形编辑器,你会经常要解决一些算法问题。本文盘点一些我开发图形编辑器时遇到的简单几何算法问题。 判断两个矩形是否发生碰撞(或者说相交),即两个矩形有重合的区域。 常见使用场景: 使用选择工具 框选 图形(框选策略除了相交

    2024年02月16日
    浏览(35)
  • 基于EasyX学习图形学中的三维几何变换【全】

    本文开始学习几何变换中的三维变换,对于各种变换的定义方法基本和二维变换一样,在此我就不过多赘述了。 三维变换矩阵 由于二维变换矩阵为三阶矩阵,所以三维变换矩阵为四阶矩阵 以下例子均在此正方体基础上 坐标表示 矩阵表示 变换矩阵 核心代码 效果展示 坐标表

    2024年02月09日
    浏览(28)
  • 【干货分享】如何一键打造理想露营地?春日露营,即刻出发!Python | 建模 | 3D | 图形引擎| 几何引擎

    在这个快节奏的时代,我们都渴望找到一片属于自己的宁静角落。 你是否曾畅想在星空下,与大自然亲密接触,享受露营的乐趣🌌 但是,想到搭建帐篷、生火、布置灯光等一系列繁琐的准备工作,又望而却步😖 想象一下 大包小包,拖家带口 ,还要为应对各种突发情况准备

    2024年03月23日
    浏览(22)
  • SVG的一些基础知识,包括SVG坐标系统、支持的几何图形和样式,动画的基础知识,包括基本动画和路径动画

    SVG(可缩放矢量图形)是一种使用XML格式定义的图像格式,它可以将二维图像呈现为任意大小的图像,而不会产生像素化。由于它的矢量设计,SVG成为了实现各种图形和动画的理想平台。在本文中,我们将探讨如何使用SVG实现图形和动画。 在开始之前,让我们首先了解一下

    2024年02月03日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包