opencv-python(三):画图

本文详细介绍了OpenCV中的各种绘图函数,包括line、circle、ellipse、rectangle、polylines和putText,展示了它们的参数用法和实例,帮助读者掌握在图像上绘制不同形状的能力。
摘要由CSDN通过智能技术生成

1. opencv的绘图函数都有相同的参数,所以现列举所有的绘图函数,统一介绍其参数

  • cv2.line():划线
  • cv2.circle():划圆
  • cv2.ellipse():画椭圆
  • cv2.rectangle():画矩形
  • cv2.polylines():画多边形
  • cv2.putText():图片上添加文字

所有的函数都有如下参数:

  • img:你想要绘制图像的那幅图像
  • color:形状的颜色,传入一个元组RGB格式,例如:(255,0,0)
  • thickness:线条的粗细(整数)。默认值是1,若=-1,则填表填充(前提是闭合图形)
  • linetype:线条的类型,8连接,抗锯齿等。默认情况是8连接。cv2.LINE_AA:为抗锯齿
  • shift:精度(一般不填,按默认处理)

2. 特殊的,每个函数还有各自的特殊参数:

  • cv2.line(img,pt1,pt2,color,thickness,lineType, shift):画直线
  • pt1:画线的起始坐标,比如(10,20)
  • pt2:画线的终点坐标,比如(50,90)
# 在img上从(10,10)到(120,120)画一条直线,颜色为蓝色(255,0,0),粗细=2,线条为抗锯齿类型
cv2.line(img,(10,10),(120,120),(255,0,0),2,cv2.LINE_AA)
  • cv2.circle(img,center,radius,color,thickness,lineType, shift):画圈
  • center:圆的圆心坐标,比如(50,50)
  • radius:圆的半径(整型)
# 在img上画圆,以坐标(50,50)为圆心,30为半径,线条粗心=2
cv2.circle(img,(50,50),30,(255,0,0),2)

# 在img上画圆,以坐标(50,50)为圆心,30为半径,并且圆为实心圆(thickness=-1表示填充)
cv2.circle(img,(50,50),30,(255,0,0),-1)
  • cv2.ellipse(img, center, axes, angle, startAngle, endAngle, color, thickness, lineType, shift):画椭圆
  • center:椭圆的中心坐标(元组)
  • axes:椭圆的长短轴组成的元组,例如长轴=20,短轴=10,则axes=(20,10)
  • angle:椭圆倾斜的角度(整型)
  • startAngle & endAngle:通过这两个参数,我们可以控制是否完全显示椭圆,如果设置为startAngle=0,endAngle=360,表示该椭圆全部被绘制,若startAngle=0,endAngle=180,该椭圆只有一半被绘制,若startAngle=0,endAngle=90,该椭圆的四分之一被绘制
# 下图第一个圈,绘制整个椭圆(0~360°)
cv2.ellipse(img,(50,50),(20,10),45,0,360,(255,0,0),2)

# 下图第二个圈,绘制部分椭圆(0~180°)
cv2.ellipse(img,(50,50),(20,10),45,0,180,(255,0,0),2)

# 下图第三个圈,绘制部分椭圆(0~90°)
cv2.ellipse(img,(50,50),(20,10),45,0,90,(255,0,0),2)

在这里插入图片描述

  • cv2.rectangle(img,pt1,pt2,color,thickness,lineType, shift=None):画矩形
  • pt1:矩形左上角的坐标(元组)
  • pt2:矩形右下角的坐标(元组)
  • cv2.polylines(img, pts, isClosed, color, thickness=None, lineType=None, shift):画多边形
  • pts:一个int32类型的二维数组,详见下面例子
  • isClosed:是否封闭该多边形(即是否首尾相连)
pos=[(1,1),(1,100),(200,200)] # 定义多边形几个顶点的坐标
pos = np.array(pos, np.int32).reshape((-1, 1, 2)) #转换为np类型,形状为(n,1,2),即n个行1列2的数组

imgRet = cv2.polylines(img, [pos], False, (0, 255, 0), 3) # 注意pos要添加[],否则图中只会描绘顶点,而不是互相连接
cv2.imshow('image', img)
cv2.waitKey(0)
  • putText(img, text, org, fontFace, fontScale, color, thickness, lineType, bottomLeftOrigin):图片上添加文字
  • text:要添加的文字(str)
  • org:要添加的坐标位置,是从文字的头文字坐标计算(元组)
  • fontFace:字体类型(具体可选项见下表)
  • fontScale:字体大小
  • bottomLeftOrigin:即与lineType一样
cv2.FONT_HERSHEY_SIMPLEX正常大小无衬线字体.
cv2.FONT_HERSHEY_PLAIN小号无衬线字体.
cv2.FONT_HERSHEY_DUPLEX正常大小无衬线字体比 CV_FONT_HERSHEY_SIMPLEX 更复杂)
cv2.FONT_HERSHEY_COMPLEX正常大小有衬线字体.
cv2.FONT_HERSHEY_TRIPLEX正常大小有衬线字体 ( 比 CV_FONT_HERSHEY_COMPLEX更复杂)
cv2.FONT_HERSHEY_COMPLEX_SMALLCV_FONT_HERSHEY_COMPLEX 的小译本.
cv2.FONT_HERSHEY_SCRIPT_SIMPLEX手写风格字体.
cv2.FONT_HERSHEY_SCRIPT_COMPLEX比 CV_FONT_HERSHEY_SCRIPT_SIMPLEX 更复杂.
cv2.FONT_ITALIC字体标记合成。就是斜体字.
# 这里字体选择了cv2.FONT_HERSHEY_SCRIPT_SIMPLEX,字体大小2,线条宽度2
cv2.putText(imgBgr,'this is a text',(10,500),cv2.FONT_HERSHEY_SCRIPT_SIMPLEX,2,(255,0,0),2)

3. 总结

请尝试画出下图:
在这里插入图片描述
参考代码:

import cv2
import numpy as np

img = np.zeros((500, 500, 3))  # 创建一个500*500的数组,作为我们的背景图

cv2.circle(img, (450, 50), 50, (0, 0, 255), -1)  # 画红色实心圆

cv2.rectangle(img, (400, 0), (500, 100), (0, 255, 0), 2)  # 画绿色矩形

pos = [(10, 2), (21, 28), (65, 16)]
pos = np.array(pos, np.int32).reshape((-1, 1, 2))
cv2.polylines(img, [pos], True, (255, 255, 255))  # 画左上角的多边形

cv2.line(img, (0, 0), (500, 500), (255, 0, 0), 2)  # 画对角蓝线

cv2.ellipse(img, (250, 250), (80, 30), 0, 0, 180, (255, 0, 0), -1)  # 画半椭圆

cv2.putText(img, "Opencv-Python", (50, 450), cv2.FONT_HERSHEY_SCRIPT_SIMPLEX, 2, (255, 255, 255), 3)  # 添加文字,样式为手写体

cv2.imshow("", img)
cv2.waitKey(0)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我是一个对称矩阵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值