日常生活的交流与学习

首页 新随笔 联系 管理

opencv 绘图

参数说明

绘制形状的函数有一些共同的参数:

  • img:要绘制形状的图片
  • color:绘制的颜色
    • 彩色图就传入 BGR 的一组值,如蓝色就是 (255,0,0)
    • 灰度图,传入一个灰度值就行
  • thickness:线宽,默认为 1;对于矩形 / 圆之类的封闭形状而言,传入 - 1 表示填充形状
  • lineType:线条类型,三个参数可选 cv2.LINE_4cv2.LINE_8cv2.LINE_AA

1. 画线

cv2.line(img, ps, pe, color, thickness, lineType, shift)

ps:直线的起点位置,注意这是一个坐标点,类似 (X,Y) 这样,
pe:直线的终点位置,同上

绘制多条直线

如果需要绘制多条直线,使用 cv2.polylines() 要比 cv2.line() 高效很多
例如:

# 使用cv2.polylines()画多条直线
line1 = np.array([[100, 20],  [300, 20]], np.int32).reshape((-1, 1, 2))
line2 = np.array([[100, 60],  [300, 60]], np.int32).reshape((-1, 1, 2))
line3 = np.array([[100, 100],  [300, 100]], np.int32).reshape((-1, 1, 2))
cv2.polylines(img, [line1, line2, line3], True, (0, 255, 255))

2. 矩形

cv2.rectangle(img, ps, pe, color, thickness, lineType, shift)

ps:矩形左上角点的坐标,
pe:矩形右下角点的坐标,
shift:坐标点小数点位数

3. 圆

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

center:圆心坐标,
radius:圆的半径值,
shift:圆心坐标和半径的小数点位数

5.  多边形

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

pts:多边形各边的坐标点组成的一个列表,是一个 numpy 的数组类型

isClosed:值为 True 或 False,若为 True 则表示一个闭合的多边形,若为 False 则不闭合

要绘制多边形,首先需要顶点的坐标。将这些点组成形状为ROWSx1x2的数组,其中ROWS是顶点数,并且其类型应为 int32。在这里,我们绘制了一个带有四个顶点的黄色小多边形。

pts = np.array([[10,5],[20,30],[70,20],[50,10]], np.int32)
pts = pts.reshape((-1,1,2))
cv.polylines(img,[pts],True,(0,255,255))

6. 向文本或矩形框添加文字

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

  • text:文字内容,

  • org:文字在图像中的左下角坐标

  • fontFace:字体类型,可选参数有以下几种

FONT_HERSHEY_SIMPLEX,FONT_HERSHEY_PLAIN,FONT_HERSHEY_DUPLEX,FONT_HERSHEY_COMPLEX, FONT_HERSHEY_TRIPLEX, FONT_HERSHEY_COMPLEX_SMALL, FONT_HERSHEY_SCRIPT_SIMPLEX, orFONT_HERSHEY_SCRIPT_COMPLEX

  • fontScale:缩放比例,用该值乘以程序字体默认大小即为字体大小
  • bottomLeftOrigin:默认为 true,即表示图像数据原点在左下角;若为 False 则表示图像数据原点在左上角。
import cv2 as cv
import numpy as np

img=np.zeros([512,512,3],np.uint8) ##创建一副黑色的图片

"""画线"""
cv.line(img,(0,32),(512,89),(255,0,0),3,cv.LINE_8)

"""画矩阵"""
tangle=cv.rectangle(img, (84, 45), (210, 228), (0, 255, 0), 3,cv.LINE_4)

"""画圆"""
cv.circle(img, (447, 63), 63, (0, 0, 255), -1)

"""画椭圆"""
cv.ellipse(img, (256, 256), (100, 50), 90, 0, 360, (255, 0, 0), 2)

"""画多边形"""
pts = np.array([[10,5],[20,30],[70,20],[50,10]], np.int32)
pts = pts.reshape((-1,1,2))
cv.polylines(img,[pts],True,(0,255,255))

"""在图片上加文字"""
font = cv.FONT_HERSHEY_SIMPLEX
cv.putText(img,'OpenCV',(10,500), font, 2,( 0,255,0),2,cv.LINE_AA)

"""矩形框上加文字"""
cv.putText(tangle,'OpenCV',(84, 40), font, 0.5,( 0,255,0),1,cv.LINE_AA)

"""使用cv.polylines()画多条直线"""
line1 = np.array([[100, 20],  [300, 20]], np.int32).reshape((-1, 1, 2))
line2 = np.array([[100, 60],  [300, 60]], np.int32).reshape((-1, 1, 2))
line3 = np.array([[100, 100],  [300, 100]], np.int32).reshape((-1, 1, 2))
cv.polylines(img, [line1, line2, line3], True, (0, 255, 255))

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

posted on 2023-03-02 17:34  lazycookie  阅读(132)  评论(0编辑  收藏  举报