【跟官网学opencv-python】笔记1.2:opencv基本绘图函数

目录


前言

跟着官网学习才是基础入门的最佳选择,下文是opencv-python官网的学习记录及扩展!

目标

掌握基本绘图函数 cv2.line() , cv2.cicle() , cv2.rectangle() , cv2.ellipse() , cv2.putText()的使用。

函数详解

主要参数介绍

color: 形状的颜色,以RGB为例,需要传入的元组,例(255,0,0)代表蓝色,对于灰度图只需传入灰度值
thickness: 线条的粗细,如果给一个闭合图形设置为 -1 ,那么这个图形就会被填充,默认值为1
linetype: 线条的类型: 填充,4连通,8连接,抗锯齿等。默认是8连接。cv2.LINE_AA为抗锯齿,显示线条更平滑(代码演示中有对比)。
cv.FILLED  填充
cv.LINE_4  4连通线
cv.LINE_8  8连通线
cv.LINE_AA  抗锯齿线

1、cv2.line()画线

cv2.line(img, pt1, pt2, color, thickness=None, lineType=None, shift=None)
img    图像.
pt1    线段的第一个点.
pt2    线段的第二个点.
color    线条颜色.
thickness    线条粗细.
lineType    线条类型.
shift    坐标的小数位数

2、cv2.rectangle()画矩形

cv2.rectangle(img, pt1, pt2, color, thickness=None, lineType=None, shift=None)
img    图像.
pt1    矩形的顶点.
pt2    与pt1相对的矩形顶点.
color    矩形颜色或亮度(灰度图像).
thickness    构成矩形的线条的粗细(如果为正数)。负值(如 FILLED)表示函数必须绘制填充矩形.
lineType    线路类型. See LineTypes
shift    点坐标的小数位数

3、cv2.circle()画圆

cv2.circle(img, center, radius, color, thickness=None, lineType=None, shift=None)
img    图像.
center    圆心.
radius    圆的半径.
color    圆的颜色.
thickness    圆轮廓的粗细(如果为正)。负值,如 FILLED,表示要绘制一个填充的圆.
lineType    圆边界的类型.
shift    圆心坐标和半径值的小数位数

4、cv2.ellipse()画椭圆

cv2.ellipse(img, center, axes, angle, startAngle, endAngle, color, thickness=None, lineType=None, shift=None)
img    图像.
center    椭圆的中心.
axes    椭圆主轴尺寸的一半.
angle    椭圆旋转角度(以度为单位).
startAngle    椭圆弧的起始角度(以度为单位).
endAngle    椭圆弧的结束角(以度为单位).
color    椭圆颜色.
thickness    椭圆弧轮廓的厚度(如果为正)。否则,这表示要绘制填充的椭圆扇区.
lineType    椭圆边界的类型. 
shift    中心坐标和轴长的小数位数

5、cv2.polylines()画多边形

cv2.polylines(img, pts, isClosed, color, thickness=None, lineType=None, shift=None)
img    图像.
pts    多边形曲线数组.
isClosed    指示绘制的折线是否闭合的标志。如果它们闭合,则该函数将绘制一条从每条曲线的最后一个顶点到其第一个顶点的线.
color    折线颜色.
thickness    折线边的厚度.
lineType    线段的类型. See LineTypes
shift    顶点坐标中的小数位数.

需要指定每个顶点的坐标,构建一个大小相等于行数*1*2的数组,行数就是点的数目,这个数组必须为int32。
可以用来画很多条线。只要把想画的线放在一个集合中并传给函数就可以了,每条线会独立绘制,会比用 cv2.line() 一条一条的绘制快一些。

6、cv2.putText()绘制文本

cv2.putText(img, text, org, fontFace, fontScale, color, thickness=None, lineType=None, bottomLeftOrigin=None)
img    图像.
text    要绘制的文本字符串.
org    图像中文本字符串的左下角.
fontFace    字体类型.
fontScale    字体比例因子乘以特定于字体的基本大小.
color    文本颜色.
thickness    用于绘制文本的线条粗细.
lineType    线型.
bottomLeftOrigin    如果为 true,则文本起点坐标位于左下角。否则,它位于左上角(字体呈现上下翻转).


代码演示

import cv2
import numpy as np
import cv2

winname='example'
cv2.namedWindow(winname)

# Create a black image
img = np.zeros((512,512,3), np.uint8)
# 线,Draw a diagonal blue line with thickness of 5 px
cv2.line(img,(0,0),(511,511),(255,0,0),5)
# 矩形
cv2.rectangle(img,(384,0),(510,128),(0,255,0),3)
# 圆,-1为向内填充
cv2.circle(img,(447,63), 63, (0,0,255), -1)
# 椭圆,
cv2.ellipse(img,(256,256),(100,50),50,0,180,255,-1)
# 多边形
pts = np.array([[10,5],[20,30],[70,20],[50,10]], np.int32)
pts = pts.reshape((-1,1,2))
cv2.polylines(img,[pts],True,(0,255,255))  # 第3个参数若为False,则结果为不闭合的线
# 文字,
font = cv2.FONT_HERSHEY_SIMPLEX
cv2.putText(img,'A',(10,200), font, 4,(255,255,255),2,cv2.FILLED,False)
cv2.putText(img,'A',(10,300), font, 4,(255,255,255),2,cv2.LINE_4,False)
cv2.putText(img,'A',(10,400), font, 4,(255,255,255),2,cv2.LINE_8,False)
cv2.putText(img,'A',(10,500), font, 4,(255,255,255),2,cv2.LINE_AA,False)
# 显示
cv2.imshow(winname,img)
cv2.waitKey(0)
cv2.destroyWindow(winname)

运行效果

下图为代码运行效果,图中的字母“A”,采用了不同的linetype绘制,可以看出cv2.LINE_AA抗锯齿类型,显示线条更平滑,更常用。

参考

OpenCV: OpenCV-Python Tutorials

学习、进步、坚持。。。内容不间断更新中。。。

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
青葱年少的头像青葱年少普通用户
上一篇 2023年11月8日
下一篇 2023年11月8日

相关推荐