opencv 绘图功能

阅读更多
opencv 绘图功能


学习画线、圆和矩形等多种几何形状,给图片添加文字。
绘制各种几何形状、添加文字
OpenCV函数:cv2.line(), cv2.circle(), cv2.rectangle(), cv2.ellipse(), cv2.putText()

绘制形状的函数有一些共同的参数,
img:要绘制形状的图片
color:绘制的颜色,绘制彩色就传入BGR的一组值,如(255,0,0);灰度图,传入一个灰度值就行
thickness:线宽,默认为1;对于矩形/圆之类的封闭形状而言,传入-1表示填充形状



画线
line(img, pt1, pt2, color, thickness=None, lineType=None, shift=None)


画矩形
rectangle(img, pt1, pt2, color, thickness=None, lineType=None, shift=None)



画圆
circle(img, center, radius, color, thickness=None, lineType=None, shift=None)



画椭圆
ellipse(img, center, axes, angle, startAngle, endAngle, color, thickness=None, lineType=None, shift=None)

# 参数2:椭圆中心(x, y)
# 参数3:x / y轴的长度
# 参数4:angle–椭圆的旋转角度(顺时针)
# 参数5:startAngle–椭圆的起始角度(顺时针)
# 参数6:endAngle–椭圆的结束角度(顺时针)



画多边形
画多边形需要指定一系列多边形的顶点坐标,相当于从第一个点到第二个点画直线,再从第二个点到第三个点画直线….

# 定义四个顶点坐标
pts = np.array([[10, 5],  [50, 10], [70, 20], [20, 30]], np.int32)
# 顶点个数:4,矩阵变成4*1*2维
pts = pts.reshape((-1, 1, 2))


polylines(img, pts, isClosed, color, thickness=None, lineType=None, shift=None)


绘制多条直线
使用cv2.polylines()要比cv2.line()高效很多

polylines(img, pts, isClosed, color, thickness=None, lineType=None, shift=None)

cv2.polylines(img, [line1, line2, line3], True, (0, 255, 255))



添加文字
使用cv2.putText()添加文字,它的参数也比较多,
putText(img, text, org, fontFace, fontScale, color, thickness=None, lineType=None, bottomLeftOrigin=None)

参数2:要添加的文本
参数3:文字的起始坐标(左下角为起点)
参数4:字体
参数5:文字大小(缩放比例)
参数6:LineTypes
http://ex2tron.wang/opencv-python-drawing-function/



填充填充多边形
fillPoly(img, pts, color, lineType=None, shift=None, offset=None)

# pts多边形的点位置



# -*-encoding:utf-8-*-
import pytesseract
from PIL import Image
from PIL import ImageFilter
from PIL import ImageFont
from PIL import ImageDraw
import numpy as np
from PIL import Image

import cv2


def main():
    # =================================画线
    # 创建一副黑色的图片
    img = np.zeros((512, 512, 3), np.uint8)
    # 画一条线宽为5的蓝色直线,参数2:起点,参数3:终点
    cv2.line(img, (0, 0), (512, 512), (255, 0, 0), 5)



    # =================================画矩形
    # 画一个绿色边框的矩形,参数2:左上角坐标,参数3:右下角坐标
    cv2.rectangle(img, (384, 0), (510, 128), (0, 255, 0), 3)

    # =================================画圆
    # 画一个填充红色的圆,参数2:圆心坐标,参数3:半径
    # cv2.circle(img, (447, 63), 63, (0, 0, 255), -1)
    cv2.circle(img, (447, 63), 63, (0, 0, 255), 1)

    # =================================画椭圆
    # 在图中心画一个填充的半圆
    cv2.ellipse(img, (256, 256), (100, 50), 45, 0, 180, (255, 0, 0), 1)

    # 参数2:椭圆中心(x, y)
    # 参数3:x / y轴的长度
    # 参数4:angle–椭圆的旋转角度(顺时针)
    # 参数5:startAngle–椭圆的起始角度(顺时针)
    # 参数6:endAngle–椭圆的结束角度(顺时针)

    # =================================画多边形
    # 定义四个顶点坐标
    pts = np.array([[10, 5], [50, 10], [70, 20], [20, 30]], np.int32)
    print("pts = ", pts)
    # 顶点个数:4,矩阵变成4*1*2维
    pts = pts.reshape((-1, 1, 2))
    print("pts2 = ", pts)

    print("[pts] = ", [pts])

    cv2.polylines(img, [pts], True, (0, 255, 255))
    # polylines(img, pts, isClosed, color, thickness=None, lineType=None, shift=None)

    # =================================绘制多条直线
    # 使用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))

    # =================================添加文字
    # 添加文字
    font = cv2.FONT_HERSHEY_SIMPLEX
    cv2.putText(img, 'ex2tron', (10, 500), font,
                2, (255, 255, 255), 2, lineType=cv2.LINE_AA)
    # putText(img, text, org, fontFace, fontScale, color, thickness=None, lineType=None, bottomLeftOrigin=None)

# =================================填充填充多边形
    # 多边形的点位置
    tri1 = np.array([[0, 0], [25, 10], [10, 20]], np.int32)
    cv2.fillPoly(img, [tri1], (255, 255, 255))

    cv2.imshow('line', img)
    cv2.waitKey(0)


if __name__ == '__main__':
    main()








你可能感兴趣的:(opencv 绘图功能)