Python-OpenCV——绘图(画线,矩形,圆,加文字)

目录

参数说明

1.画线 

2.矩形

3. 圆

4.椭圆

5. 多边形

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


参数说明

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

  • 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:直线的终点位置,同上

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:圆心坐标和半径的小数点位数

4.椭圆

cv2.ellipse(img, center, axes, rotateAngle, startAngle, endAngle, color, thickness, lineType, shift)

center:椭圆的圆心坐标,注意这是一个坐标值,axes:椭圆的长轴和短轴的长度,这是一个元组信息

rotateAngle:椭圆旋转的角度,startAngle:椭圆弧起始角度,endAngle:椭圆弧终止角度

OpenCV中原点在左上角,所以这里的角度是以顺时针方向计算的

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))

如果需要绘制多条直线,使用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))

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()

猜你喜欢

转载自blog.csdn.net/zangba9624/article/details/105959943