6.绘制图像和文字

一、绘制直线

1.API介绍

line:绘制两点连接的线段
API定义:

def line(img, pt1, pt2, color, thickness=None, lineType=None, shift=None)

(1)img:输入图像
(2)pt1:线段的第一个点
(3)pt2:线段的第二个点
(4)color:线条的颜色
(5)thickness:线条的宽度
(6)lineType:线条的类型
该参数可取值如下:
LINE_4 = 4 # 4-connected线
LINE_8 = 8 # 8-connected线
LINE_AA = 16 # 抗锯齿线,画出来的线没有锯齿,较为常用。
(7)shift:点坐标中的小数位数,一般不用

2.代码示例

img = cv.imread('../images/Lena.jpg')
cv.line(img,(8,8),(511,80),(255,125,0),5,cv.LINE_AA)

cv.imshow("show img", img)
cv.waitKey(0)

在这里插入图片描述

二、绘制矩形

1.理论讲解

OpenCV中的矩形一般指矩形的长和宽是水平和竖直的。
如果长和宽是倾斜的,叫做旋转矩形。
因此,我们确定一个矩形有如下几种方法:

  1. 使用对角线上两点坐标确定一个矩形
  2. 使用左上角顶点和矩形的长宽
  3. 使用长和宽所在的两个行列

在绘制矩形中,采用的是使用对角线两点坐标确定一个矩形。

2.API介绍

rectangle:绘制一个有固定宽度或者填充的矩形。
API定义:

def rectangle(img, pt1, pt2, color, thickness=None, lineType=None, shift=None)

img:输入图像
pt1:矩形的一个顶点
pt2:和pt1处于同一条对角线上的另一个顶点
color: 矩形的颜色
thickness:线条的厚度,-1则表示填充矩形
lineType:线条的类型,和直线绘制相同
shift:坐标中的小数位数

3.代码示例

import cv2 as cv
img = cv.imread('../images/Lena.jpg')

cv.rectangle(img, (555,0),(25,50),(255,0,0),2)
cv.rectangle(img, (15,60),(500,80),(255,0,0),-1)

cv.imshow("show img", img)
cv.waitKey(0)

效果:
在这里插入图片描述

三、绘制多边形

1.理论讲解

只要知道多边形每个点的坐标以及连接的顺序,就可以绘制出来。
多边形如果是封闭图形,初始点和结束点为同一个点。

2.API介绍

polylines: 绘制多条多边形曲线,构成一个多边形。
API定义:

def polylines(img, pts, isClosed, color, thickness=None, lineType=None, shift=None)

img:输入图像
pts:多边形曲线数组
pt2: 指示绘制的多段线是否闭合。闭合时,函数在最后一个顶点和第一个顶点之间自动连接线段。
color: 多边形的颜色
thickness:多边形的线条厚度
lineType:线条类型
shift:点坐标中的小数位数

3.代码示例

import cv2 as cv
import numpy as np

img = cv.imread('../images/Lena.jpg')

pts = np.array([[10,5],[200,50],[400,20],[50,100]], np.int32)
pts = pts.reshape((-1,1,2))
cv.polylines(img,[pts],True,(0,255,255),3, cv.LINE_AA)

pts = np.array([[800,10],[500,60],[600,120],[900,20],[980,100]], np.int32)
pts = pts.reshape((-1,1,2))
cv.polylines(img,[pts],False,(0,12,255),5, cv.LINE_AA)

cv.imshow("show img", img)
cv.waitKey(0)

效果:
在这里插入图片描述

四、绘制圆形

1.理论介绍

需要一个圆心和一个半径,就可以确定一个圆。

2.API介绍

circle:绘制一个圆。
API定义:

def circle(img, center, radius, color, thickness=None, lineType=None, shift=None)

(1)img:输入图像
(2)center:圆心坐标
(3)radius:圆的半径
(4)color:多边形的颜色
(5)thickness:多边形的线条的厚度
(6)lineType:线条的类型,同直线
(7)shift:点坐标中的小数位数

3.代码示例

img = cv.imread('../images/Lena.jpg')

cv.circle(img, (227,103), 63, (156, 25, 25), 3)
cv.circle(img, (527,103), 63, (56, 185, 25), 3, cv.LINE_AA)
cv.circle(img, (827,103), 63, (56, 85, 125), -1, cv.LINE_AA)

cv.imshow("show img", img)
cv.waitKey(0)

在这里插入图片描述

五、绘制椭圆

1.理论讲解

确定一个椭圆,需要知道椭圆的中心坐标,长轴和短轴的长度。
注:opencv中可以设置绘制椭圆的起始角度和结束角度。

2.API介绍

ellipse:绘制一个椭圆形或椭圆的部分。
API定义:

def ellipse(img, center, axes, angle, startAngle, endAngle, color, thickness=None, lineType=None, shift=None)

(1)img:输入图像
(2)center:椭圆中心坐标
(3)axes:椭圆长轴和短轴一半的长度
(4)angle:椭圆旋转角度,以度为单位
(5)startAngle:椭圆弧的起始角度,以度为单位(0度为水平向右)
(6)endAngle:椭圆弧的结束角度,以度为单位
(7)color:椭圆的颜色
(8)thickness:椭圆弧轮廓的厚度(正数),如果 为负值,则绘制一个填充椭圆扇区。
(9)lineType:线条的类型,同直线
(10)shift:中心点坐标和轴值中的小数位数

3.代码示例

img = cv.imread('../images/Lena.jpg')

cv.ellipse(img, (226, 106), (100, 50), 0, 0, 270, (156, 25, 25), -1)
cv.ellipse(img, (526, 106), (100, 50), 0, 0, 180, (56, 185, 25), 3, cv.LINE_AA)
cv.ellipse(img, (226, 220), (100, 50), 0, 0, 360, (56, 85, 225), 3, cv.LINE_AA)

cv.imshow("show img", img)
cv.waitKey(0)

在这里插入图片描述

六、绘制文字

1.理论讲解

OpenCV提供了文本输入语句。
在文本输入时需要确定文本输入的位置,设置文本的类型,设置文本的大小、颜色、粗度等等。
注:OpenCV中默认不支持绘制中文。

2.API介绍

putText:绘制文本到图像上。
API定义:

def putText(img, text, org, fontFace, fontScale, color, thickness=None, lineType=None, bottomLeftOrigin=None)

(1)img:输入图像
(2)text:要绘制的文本
(3)org:图像中文本字符串的左下角
(4)fontFace:字体类型
(5)fontScale:字体比例因子,乘以字体特定的基本大小。
(6)color:字体的颜色
(7)thickness:绘制文本的线条厚度
(8)lineType:线条的类型,同直线
(9)bottomLeftOrigin:如果为真,图像数据源位于左下角。否则,它在左上角。

常用字体:

FONT_HERSHEY_SIMPLEX = 0  # 正常大小的无衬线字体
FONT_HERSHEY_PLAIN = 1  # 小号无衬线字体
FONT_HERSHEY_DUPLEX = 2  # 正常大小的无衬线字体(比FONT_HERSHEY_SIMPLEX复杂)
FONT_HERSHEY_COMPLEX = 3  # 普通大小的衬线字体
FONT_HERSHEY_TRIPLEX = 4  # 普通大小的衬线字体(比FONT_HERSHEY_COMPLEX更复杂)
FONT_HERSHEY_COMPLEX_SMALL = 5  # FONT_HERSHEY_COMPLEX的较小版本
FONT_HERSHEY_SCRIPT_SIMPLEX = 6  # 手写风格字体
FONT_HERSHEY_SCRIPT_COMPLEX = 7  #FONT_HERSHEY_SCRIPT_SIMPLEX的更复杂的变体
FONT_ITALIC = 16  # 斜体标志

3.代码示例:

img = cv.imread('../images/Lena.jpg')

cv.putText(img, 'Hello World', (22, 106),cv.FONT_HERSHEY_SIMPLEX, 4,(251,12,185), 2, cv.LINE_AA)
cv.putText(img, 'AI', (22, 176),3, 2,(53, 192, 204), 2, cv.LINE_AA, True)
cv.putText(img, 'BlockChain', (22, 170),3, 2,(153, 52, 114), 2, cv.LINE_AA, False)

cv.imshow("show img", img)
cv.waitKey(0)

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值