> 文档中心 > opencv绘制图形和文字,一篇文章学会绘制图形操作

opencv绘制图形和文字,一篇文章学会绘制图形操作

目录

绘制直线

绘制矩形

绘制圆形

绘制椭圆 

绘制多边形

绘制文字

其他方法


绘制直线

        opencv绘制直线使用cv2.line方法.

def line(img, pt1, pt2, color, thickness=None, lineType=None, shift=None)
  • img:表示要绘制的图片
  • pt1:直线起始坐标
  • pt2:直线结束坐标
  • color线条颜色
  • thickness:线条粗细
  • lineType:个人理解为线条抗锯齿程度,可选(-1,4,8,16),默认为8
  • shift:坐标中的小数位数

实例代码

        下面使用cv.line绘制4条直线

import cv2import numpy as npbgd = np.zeros((480, 640, 3), np.uint8)cv2.line(bgd, (100, 100), (200, 400), (0, 0, 255), 25, -1)cv2.line(bgd, (200, 100), (300, 400), (0, 0, 255), 25, 4)cv2.line(bgd, (300, 100), (400, 400), (0, 0, 255), 25, 8)cv2.line(bgd, (400, 100), (500, 400), (0, 0, 255), 25, 16)cv2.imshow('line', bgd)cv2.waitKey(0)cv2.destroyAllWindows()

        可以发现lineType越大,线条越平滑,个人理解就是抗锯齿程度越高 


绘制矩形

        绘制矩形使用cv2.rectangle方法

def rectangle(img, pt1, pt2, color, thickness=None, lineType=None, shift=None)

        参数和绘制直线基本由于,不再赘述,但是这里的pt1和pt2分别表示矩形左上角和右下角

实例代码

import cv2import numpy as npbgd = np.zeros((480, 640, 3), np.uint8)cv2.rectangle(bgd, (100, 100), (400, 300), (0, 255, 0), 3)cv2.imshow('rectangle', bgd)cv2.waitKey(0)cv2.destroyAllWindows()


 绘制圆形

        画圆使用cv2.circle方法

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

        这个方法参数与上面画直线有些区别,下面解释与画直线有区别的参数,其他一样的

  • center:这个表示要绘制圆形的圆心
  • radius:表示圆的半径

实例代码

import cv2import numpy as npbgd = np.zeros((480, 640, 3), np.uint8)cv2.circle(bgd, (320, 240), 150, (255, 0, 0), 3, 16)cv2.imshow('circle', bgd)cv2.waitKey(0)cv2.destroyAllWindows()


绘制椭圆 

        绘制椭圆使用cv2.ellipse方法

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

        这个方法参数很多,但是与上面不同的参数也就几个,下面对不同的参数做出说明

  • center:表示椭圆的圆心
  • axes:一个元组(x,y),表示椭圆的在x轴上的半径和在y轴上的半径
  • angle:椭圆的倾斜程度,也就是顺时针旋转多少度
  • startAngle:椭圆起始的角度,起始点是x轴右边
  • endAngle:椭圆终止的角度,完整的椭圆开始角度为0,结束角度为360

        除了上面的几个参数,其他参数和上面一样的,不再赘述。

代码实例

import cv2import numpy as npbgd = np.zeros((480, 1000, 3), np.uint8)cv2.ellipse(bgd, (230, 240), (130, 90), 0, 0, 360, (0, 0, 255), 5, 16)cv2.ellipse(bgd, (530, 240), (130, 90), 30, 0, 360, (0, 255, ), 5, 16)cv2.ellipse(bgd, (830, 240), (130, 90), 0, 0, 270, (255, 0, 0), 5, 16)cv2.imshow('ellipse', bgd)cv2.waitKey(0)cv2.destroyAllWindows()


绘制多边形

        绘制多边形使用cv2.ploylines方法

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

        这个方法和其他方法也很相似,下面给出与上面不同参数的说明

  • pts:传入一个坐标的点集,opencv会把所有点连接组成多变形,注意:这里要传入的是三维的点集,数据类型为int32及以上
  • isClosed:表示多边形是否闭合,选择False那么就是以条折线

 代码实例

import cv2import numpy as npbgd = np.zeros((480, 640, 3), np.uint8)pts = np.array([(100, 100), (150, 400), (500, 250)], np.int32)cv2.polylines(bgd, [pts], True, (0, 0, 255), 5, 16)cv2.imshow('ploylines', bgd)cv2.waitKey(0)cv2.destroyAllWindows()


绘制文字

        在图片上显示文字使用cv2.putText方法,注意这个方法不能显示中文

def putText(img, text, org, fontFace, fontScale, color, thickness=None, lineType=None, bottomLeftOrigin=None)

        下面对这个方法与上面不同的参数进行说明

  • text:要绘制的文本
  • org:文本左下角坐标
  • fontFace:文本使用的字体,使用cv2.FONT_xxx进行选择
  • fontScale:字体大小
  • bottomLeftOrigin:布尔值,表示是否对字体进行翻转(上下左右都进行翻转)

代码实例

import cv2import numpy as npbgd = np.zeros((480, 640, 3), np.uint8)cv2.putText(bgd, 'hello world', (100, 100), cv2.FONT_HERSHEY_SIMPLEX, 2, (0, 0, 255), 5, 16, False)cv2.putText(bgd, 'hello world', (100, 300), cv2.FONT_HERSHEY_SIMPLEX, 2, (0, 0, 255), 5, 16, True)cv2.imshow('line', bgd)cv2.waitKey(0)cv2.destroyAllWindows()


其他方法

        上面的方法绘制的图形都是空心的,也就是没有填充,下面给出填充图形的方法,和原本的绘制图形参数基本是一样的。

        对于填充圆形,只需要将线条粗细设置为-1即可,填充其他图形,使用cv2.fillPoly

def fillPoly(img, pts, color, lineType=None, shift=None, offset=None)

        参数基本和ploylines一样,这里就不解释,直接使用

代码实例

import cv2import numpy as npbgd = np.zeros((480, 640, 3), np.uint8)fill_pts = np.array([(100, 300), (150, 450), (200, 250)], np.int32)cv2.fillPoly(bgd, [fill_pts], (0, 0, 255), 16)cv2.circle(bgd, (320, 240), 100, (255, 0, 0), -1, 16)cv2.imshow('show', bgd)cv2.waitKey(0)cv2.destroyAllWindows()