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

导读:本篇文章讲解 opencv绘制图形和文字,一篇文章学会绘制图形操作,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

目录

绘制直线

绘制矩形

绘制圆形

绘制椭圆 

绘制多边形

绘制文字

其他方法


绘制直线

        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 cv2
import numpy as np

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

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

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


绘制矩形

        绘制矩形使用cv2.rectangle方法

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

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

实例代码

import cv2
import numpy as np

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

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


 绘制圆形

        画圆使用cv2.circle方法

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

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

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

实例代码

import cv2
import numpy as np

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

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


绘制椭圆 

        绘制椭圆使用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 cv2
import numpy as np

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

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


绘制多边形

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

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

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

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

 代码实例

import cv2
import numpy as np

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

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


绘制文字

        在图片上显示文字使用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 cv2
import numpy as np

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

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


其他方法

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

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

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

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

代码实例

import cv2
import numpy as np

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由半码博客整理,本文链接:https://www.bmabk.com/index.php/post/74854.html

(0)

相关推荐

半码博客——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!