Python OpenCV从入门到精通——第六章——绘制图形和文字

import numpy as np # 导入Python中的numpy模块
import cv2

#           ——————————————————————————线段的绘制
#   img = cv2.line(img,pt1,pt2,color,thickness)                         #参数依次是:画布、线段起点坐标、线段终点坐标、线条颜色、线条宽度
canvas = np.zeros((300, 300, 3), np.uint8)                              #创建一个300*300三通道类型画布,以unit8类型聚合而成)(np.uint8:OpenCV中的灰度图像和RGB图像都是以uint8存储的,因此这里的类型也是uint8)
#  canvas = np.ones((300, 300, 3), np.uint8)*255                        #产生白色画布
canvas = cv2.line(canvas, (50, 50), (250, 50), (255, 0, 0), 5)          # 在画布上,绘制一条起点坐标为(50, 50)、终点坐标为(250, 50),蓝色的,线条宽度为5的线段
canvas = cv2.line(canvas, (50, 150), (250, 150), (0, 255, 0), 5)
cv2.imshow("Lines", canvas)                                             # 显示画布
cv2.waitKey()
cv2.destroyAllWindows()

#           ——————————————————————————矩形边框的绘制(正方形是特殊的矩形)
#   img = cv2.rectangle(img,pt1,pt2,color,thickness)                    #参数依次是画布、矩形左上角坐标、矩形右下角坐标、线条颜色、线条宽度(线条宽度为-1即为实心矩形)
canvas = cv2.rectangle(canvas, (50, 50), (200, 150), (255, 255, 0), 20) # 在画布上绘制一个左上角坐标为(50,50),右下角坐标为(200,150),青色的,线条宽度为20的矩形边框
cv2.imshow("Rectangle", canvas)                                         # 显示画布
cv2.waitKey()
cv2.destroyAllWindows()

#           ——————————————————————————圆形的绘制
#   img = cv2.circle(img,center,radius,color,thickness)                 #参数依次是画布、圆心坐标、半径、线条颜色、线条宽度(线条宽度为-1即为实心)
canvas = cv2.circle(canvas, (50, 50), 40, (0, 0, 255), -1)              #在画布上,绘制一个圆心坐标为(50, 50),半径为40,红色的实心圆形
cv2.imshow("TrafficLights", canvas) # 显示画布
cv2.waitKey()
cv2.destroyAllWindows()

#           ——————————————————————————获得[11, 70]范围内的三个随机值和转换成列表,opencv中的颜色值是列表
radius = np.random.randint(11, high=71,size = (3,)).tolist()

#           ——————————————————————————多边形的绘制(绘制多边形时,是按照列表中的点按顺序连接)
#   img = cv2.polylines(img,pts,isClosed,color,thickness)              #参数依次是画布、由多边形各个顶点的坐标组成的列表、True为闭合多边形反之不闭合、
pts = np.array([[100, 50], [200, 50], [250, 250], [50, 250]], np.int32)#这个数组的数据类型为np.int32
canvas = cv2.polylines(canvas, [pts], True, (0, 0, 255), 5)            #在画布上根据4个顶点的坐标,绘制一个闭合的,红色的,线条宽度为5的等腰梯形边框
cv2.imshow("Polylines", canvas) # 显示画布
cv2.waitKey()
cv2.destroyAllWindows()

#           ——————————————————————————文字的绘制(这种方法绘制中文出问题、thickness,lineType,bottomLeftOriginw为可选参数)
# img = cv2.putText(img,text,org,fontFace,fontScale,color,thickness,lineType,bottomLeftOrigin)  参数依次为:画布,文字内容,左下角下标,字体样式,字体大小,线条颜色,线条宽度,线性(线的产生算法有4、8两个值,默认为8),绘制文字时的方向默认false正写,True为镜像写
#如:cv2.putText(canvas,"mrsoft",(20,100),fontStyle,2,(0,255,0),5,8,True)
cv2.putText(canvas, "mrsoft", (20, 70), cv2.FONT_HERSHEY_TRIPLEX, 2, (0, 255, 0), 5)    # 在画布上绘制文字“mrsoft”,文字左下角的坐标为(20, 70),字体样式为FONT_HERSHEY_TRIPLEX字体大小为2,线条颜色是绿色,线条宽度为5
fontStyle = cv2.FONT_HERSHEY_TRIPLEX+cv2.FONT_ITALIC                                    #有文字样式且附带斜体效果,FONT_ITALIC为斜体,与其他字体连用,字体呈现指定样式且斜体
cv2.putText(canvas,"mrsoft",(20,70),fontStyle,2,(0,255,0),5)                            # 在画布上绘制文字“mrsoft”,文字左下角的坐标为(20, 70)字体样式为fontStyle,字体大小为2,线条颜色是绿色,线条宽度为5
cv2.putText(canvas, "mrsoft", (20, 100), fontStyle, 2, (0, 255, 0), 5, 8, True)         # 使文字“mrsoft”呈现垂直镜像效果,这时lineType和bottomLeftOrigin变成了必须参数
image = cv2.imread("2.1.jpg")
cv2.putText(image, "Flower", (20, 90), fontStyle, 1, (0, 255, 255))                     #参数依次为:图像,文字,文字左下角坐标,字体样式,大小,颜色
cv2.imshow("Text", canvas)
cv2.waitKey()
cv2.destroyAllWindows()

#           ——————————————————————————动态图形的绘制(主要:图片逐渐移动,每秒显示60帧图片实现动态)
import time
width, height = 200, 200
r = 20
x = r + 20
y = r + 100
x_offer = y_offer = 4

while cv2.waitKey(1) == -1:                             # 按下任何按键之后
    if x > width - r or x < r:                          # 如果圆的横坐标超出边界
        x_offer *= -1                                   # 横坐标速度取相反值
    if y > height - r or y < r:                         # 如果圆的纵坐标超出边界
        y_offer *= -1                                   # 纵坐标速度取相反值
    x += x_offer
    y += y_offer
    img = np.ones((width, height, 3), np.uint8) * 255   #将背景面板置为白色
    cv2.circle(img, (x, y), r, (255, 0, 0), -1)
    cv2.imshow("img", img)                              #若已有此名字窗体,则重置窗体,然后再绘制
    time.sleep(1 / 60)                                  #休眠1/60秒,也就是秒60帧
cv2.destroyAllWindows()

2.1.jpg
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值