别人没那么重要,我也没那么重要,好好活着,把能做的小事做好,够不到的东西就放弃,承认就好。做一个心情好能睡着的人,你所有事情都会在正轨上。

PythonOpenCV-图形用户界面-绘图

1. 绘制直线

函数原型

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

参数说明

img:绘制图像的图像

pt1:线段的起点坐标

pt2:线段的终点坐标

color:线段的颜色,采用BGR模型表示,如(255,0,0)

thickness:线条粗细。默认为1,设置为负数(-1)时表示绘制填充图形

lineType:线条类型,默认值为cv2.Line_8

  cv2.FILLED:填充

  cv2.LINE_4:4条连接线

  cv2.LINE_8:8条连接线

  cv2.LINE_AA:抗锯齿线,线条更加平滑

shift:表示坐标的数值精度,一般情况下不需要设置

代码示例

import cv2 as cv
import numpy as np
img = np.zeros((200, 300, 3), np.uint8)   # 创建黑色背景图
cv.line(img, (0, 0), (300, 200), (255, 0, 0), 5)  # 蓝色线
cv.line(img, (300, 0), (0, 200), (0, 255, 0), 5)  # 绿色线
cv.line(img, (250, 0), (0, 150), (0, 0, 255), 5)  # 绿色线
cv.imshow("draw", img)
cv.waitKey(0)

运行结果

 

 

2. 绘制矩形

函数原型

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

参数说明

img:绘制图像的图像

pt1:矩形的第一个顶点

pt2:矩形中与pt1相对的另一个顶点

color:线段的颜色,采用BGR模型表示,如(255,0,0)

thickness:线条粗细。默认为1,设置为负数(-1)时表示绘制填充图形

lineType:线条类型,默认值为cv2.Line_8

  cv2.FILLED:填充

  cv2.LINE_4:4条连接线

  cv2.LINE_8:8条连接线

  cv2.LINE_AA:抗锯齿线,线条更加平滑

shift:表示坐标的数值精度,一般情况下不需要设置

代码示例

import cv2 as cv
import numpy as np
img = np.zeros((200, 300, 3), np.uint8)   # 创建黑色背景图
cv.rectangle(img, (20, 20), (100, 100), (255, 0, 0), -1)  # 蓝色填充
cv.rectangle(img, (300, 0), (0, 200), (0, 255, 0), 5)  # 绿色边框
cv.imshow("draw", img)
cv.waitKey(0)

运行结果

 

3. 绘制圆

函数原型

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

参数说明

img:绘制图像的图像

center:圆心坐标

radius:半径

color:线段的颜色,采用BGR模型表示,如(255,0,0)

thickness:线条粗细。默认为1,设置为负数(-1)时表示绘制填充图形

lineType:线条类型,默认值为cv2.Line_8

  cv2.FILLED:填充

  cv2.LINE_4:4条连接线

  cv2.LINE_8:8条连接线

  cv2.LINE_AA:抗锯齿线,线条更加平滑

shift:表示坐标的数值精度,一般情况下不需要设置

代码示例

import cv2 as cv
import numpy as np
img = np.zeros((200, 300, 3), np.uint8)   # 创建黑色背景图
cv.circle(img, (160, 100), 50, (255, 0, 0), 4)  # 蓝色边框
cv.circle(img, (160, 100), 23, (0, 255, 0), -1)  # 绿色填充
cv.imshow("draw", img)
cv.waitKey(0)

运行结果

 

 

4. 绘制椭圆

函数原型

cv2.ellipse(img, center, axes, angle, startAngle, endAngle, color[, thickness[, lineType[, shift]]])

参数说明

img:绘制图像的图像

center:椭圆圆心坐标

axes:椭圆轴,如(100, 50)表示长轴的一半为100,短轴的一半为50

angle:椭圆长轴的旋转角度,即长轴与x轴的夹角

startAngle:圆弧的开始角度

endAngle:圆弧的结束角度

注意:当开始角度为0°,结束角度为360°时,可以绘制完整的椭圆,否则绘制的是椭圆弧

color:线段的颜色,采用BGR模型表示,如(255,0,0)

thickness:线条粗细。默认为1,设置为负数(-1)时表示绘制填充图形

lineType:线条类型,默认值为cv2.Line_8

  cv2.FILLED:填充

  cv2.LINE_4:4条连接线

  cv2.LINE_8:8条连接线

  cv2.LINE_AA:抗锯齿线,线条更加平滑

shift:表示坐标的数值精度,一般情况下不需要设置

代码示例

import cv2 as cv
import numpy as np
img = np.zeros((200, 300, 3), np.uint8)   # 创建黑色背景图
cv.ellipse(img, (160, 100), (120, 50), 0, 0, 360, (255, 0, 0), 4)  # 蓝色边框
cv.ellipse(img, (160, 100), (60, 15), 0, 0, 360,  (0, 255, 0), -1)  # 绿色填充
cv.imshow("draw", img)
cv.waitKey(0)

运行结果

 

5. 绘制多边形

函数原型

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

参数说明

img:绘制图像的图像

pts:多边形个顶点坐标

isClosed:是否为封闭式多边形

color:线段的颜色,采用BGR模型表示,如(255,0,0)

thickness:线条粗细。默认为1,设置为负数(-1)时表示绘制填充图形

lineType:线条类型,默认值为cv2.Line_8

  cv2.FILLED:填充

  cv2.LINE_4:4条连接线

  cv2.LINE_8:8条连接线

  cv2.LINE_AA:抗锯齿线,线条更加平滑

shift:表示坐标的数值精度,一般情况下不需要设置

代码示例

import cv2 as cv
import numpy as np
img = np.zeros((200, 300, 3), np.uint8)   # 创建黑色背景图
pts1 = np.array([[160, 20], [20, 100], [160, 180], [300, 100]], np.int32)  # 创建顶点
pts2 = np.array([[160, 60], [60, 100], [160, 140], [260, 100]], np.int32)  # 创建顶点

cv.polylines(img, [pts1], True, (255, 0, 0), 4)  # 蓝色封闭
cv.polylines(img, [pts2], False, (0, 255, 0), 4)  # 绿色不封闭曲线
cv.imshow("draw", img)
cv.waitKey(0)

运行结果

 

 

6. 绘制文本

函数原型

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

参数说明

img:绘制图像的图像

text:要绘制的文本

org:文本左下角位置

fontFace:字体类型

  cv2.FONT_HERSHEY_SIMPLEX:正常大小的sans-serif字体

  cv2.FONT_HERSHEY_PLAIN:小号的sans-serif字体

  cv2.FONT_HERSHEY_DUPLEX:较复杂的正常大小的sans-serif字体

  cv2.FONT_HERSHEY_COMPLEX:正常大小的serif字体

  cv2.FONT_HERSHEY_TRIPLEX:较复杂的正常大小的serif字体

  cv2.FONT_HERSHEY_COMPLEX_SMALL:简化版正常大小的serif字体

  cv2.FONT_HERSHEY_SCRIPT_SIMPLEX:手写风格字体

  cv2.FONT_HERSHEY_SCRIPT_COMPLEX:较复杂的手写风格字体

  cv2.FONT_ITALIC:斜体

fontScale:字体大小

bottomLeftOrigin:文本方向,默认为False,设置为True时,文本为垂直镜像效果

color:线段的颜色,采用BGR模型表示,如(255,0,0)

thickness:线条粗细。默认为1,设置为负数(-1)时表示绘制填充图形

lineType:线条类型,默认值为cv2.Line_8

  cv2.FILLED:填充

  cv2.LINE_4:4条连接线

  cv2.LINE_8:8条连接线

  cv2.LINE_AA:抗锯齿线,线条更加平滑 

代码示例

import cv2 as cv
import numpy as np
img = np.zeros((200, 320, 3), np.uint8)+255   # 创建白色背景图
font = cv.FONT_HERSHEY_SCRIPT_SIMPLEX
cv.putText(img, 'OpenCv', (50, 100), font, 2, (255, 0, 0), 2, cv.LINE_AA)  # 绘制文本
cv.putText(img, 'OpenCv', (50, 100), font, 2, (255, 0, 0), 2, cv.LINE_AA, True)  # 绘制垂直镜像文本

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

运行结果

 

7. 绘制汉字

  由于OpenCV中的cv2.putText()函数不能绘制汉字,可以借助PIL模块进行绘制

代码示例

import cv2 as cv
import numpy as np
from PIL import ImageFont, ImageDraw, Image

img = np.zeros((200, 320, 3), np.uint8)+255   # 创建白色背景图
fontpath  = "STSONG.TTF"  # 指定字体文件名
font1 = ImageFont.truetype(fontpath, 36)   # 载入字体,设置字号
img_pil = Image.Fromarray(img)   # 转成PIL对象
draw = ImageDraw(img_pil)   # 创建Draw对象
draw.text((50, 60), '计算机视觉', font=font1, fill=(0, 0, 0))   # 绘制文本
img = np.array(img_pil)   # 转成图像数组

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

 

8. 绘制箭头

函数原型

cv2.arrowedLine(img, pt1, pt2, color[, thickness[, lineType[, shitf[, tipLength]]])

参数说明

img:绘制图像的图像

pt1:线段的起点坐标

pt2:线段的终点坐标

color:线段的颜色,采用BGR模型表示,如(255,0,0)

thickness:线条粗细。默认为1,设置为负数(-1)时表示绘制填充图形

lineType:线条类型,默认值为cv2.Line_8

  cv2.FILLED:填充

  cv2.LINE_4:4条连接线

  cv2.LINE_8:8条连接线

  cv2.LINE_AA:抗锯齿线,线条更加平滑

shift:表示坐标的数值精度,一般情况下不需要设置

tipLength:箭尖相对于箭头长度的比例,默认为0.1

代码示例

import cv2 as cv
import numpy as np

img = np.zeros((200, 320, 3), np.uint8)+255   # 创建白色背景图
cv.arrowedLine(img, (50, 50), (50, 150), (0, 0, 255), 2)   # 红色垂直箭头
cv.arrowedLine(img, (50, 50), (300, 50), (255, 0, 0), 2)   # 蓝色水平箭头

cv.imshow('Draw', img)
cv.waitKey(0)

运行结果

 

/*-------------------------------------------------------------------------------------------------------

笔者说明:

  该笔记来源于本人学习Python + OpenCv时的资料,

  分享出来只是为了供大家学习,并且为了自己以后想要用的时候方便寻找。

时间:2023年4月15日

------------------------------------------------------------------------------------------------------------*/

posted @ 2023-04-15 14:22  一路狂奔的乌龟  阅读(149)  评论(0)    收藏  举报
返回顶部