前言

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。

作者:大Z

在图像中我们经常需要用到将某个局部特征画出来,比如物体检测,物体追踪等等,今天来看看有哪些好玩的绘图工具吧!

▼画线

首先要为画的线创造出环境,就要生成一个空的黑底图像。我们使用numpy进行实验:

import cv2
import numpy as np
img=np.zeros((512,512,3), np.uint8)
cv2.imshow("img",img)
cv2.waitKey(0)
cv2.destroyAllWindows()

这是黑色的底,我们的画布,我把窗口名叫做img,np.zeros()有两个参数,一个是创建的图片矩阵大小,另一个是数据类型,512,512是像素(第一个512像素高,第二个是512像素宽),3指BGR三种颜色,uint8是用0-255表示所有颜色。

我们看一下画线函数的原型:

cv2.line(img,start,end,color,thickness)

函数实例:

cv2.line(img,(0,0),(511,511),(255,0,0),5)

这个函数有5个参数,分别为:img是图像名称,(0,0)为起点坐标,(511,511)为终点坐标,(255,0,0)是蓝色,5是线的宽度。

会画一条从左上方到右下角的蓝色线段,我们看实验效果↓:

▼画矩形

画矩形函数将是十分重要的环节,在以后的实际操作项目中,我们基本上就会发现,OpenCV使用最多的绘图函数,就是画矩形函数,它使用范围非常广泛,包括画轮廓,实时跟踪目标时我们也是使用画矩形函数对跟踪的目标进行标注。接下来我们先了解一下矩形函数:

cv2.rectangle(img,(50,50),(400,400),(0,0,255),3)

这个函数有5个参数,img为图像名称,(50,50)为左上顶点坐标,(400,400)为右下顶点坐标,(0,255,0)代表绿色,线宽为3。

画矩形两个要素:左上顶点和右下顶点坐标。

我们来看一下代码:

import cv2
import numpy as np
img = np.zeros((512, 512, 3), np.uint8)
cv2.rectangle(img,(50,50),(400,400),(0,0,255),3)
cv2.imshow("img", img)
cv2.waitKey(0)
cv2.destroyAllWindows()

实验效果↓:

▼画圆

函数:

cv2.circle(img,(447,63), 63, (0,0,255), -1)

这个函数有5个参数:图像名称,圆心坐标,半径63,(0,0,255)红色,线宽为-1.当线宽-1时,表示封闭图形的颜色填充。

画圆的两要素:指定圆形的中心点坐标和半径大小。

代码:

import cv2
import numpy as np
img=np.zeros((512,512,3), np.uint8)
cv2.circle(img,(256,256), 63, (0,0,255), -1)
cv2.imshow("img",img)
cv2.waitKey(0)
cv2.destroyAllWindows()

演示效果↓:

▼画椭圆

函数原型:

cv2.ellipse(img,center,axes,angle,start_angle,end_angle,color,thickness,line_type,shift)

img是操作的图片、center是椭圆的中心的,axes是椭圆的长轴和短轴、angle是偏转角度、start_angle和end_angle分别是圆弧的起始角度和终结角度、color是线条颜色、thickness是线条粗细程度、line_type是线条的类型、shift是圆心坐标点和数轴的精度。

给出一个函数实例:

cv2.ellipse(img,(256,256),(100,50),0,0,180,255,-1)

这个函数有8个参数:img为图像名称,(256,256)为中心点坐标,100为长轴长度,50为短轴长度,0旋转角度,图像出现的部分(长轴顺时针方向起始的角度和结束角度)0,180是下半个椭圆,颜色数组这里255是蓝色。-1则为实心,大于0的数值则为空心,线条宽度由自己决定。

画椭圆的几个要素:中心点的位置坐标;长轴和短轴的长度;椭圆沿逆时针方向旋转的角度;长轴顺时针方向起始的角度和结束角度。

代码:

import cv2
import numpy as np
img=np.zeros((512,512,3), np.uint8)
cv2.ellipse(img,(256,256),(100,50),0,0,180,255,-1)
cv2.imshow("img",img)
cv2.waitKey(0)
cv2.destroyAllWindows()

演示效果↓:

现在我们画出整个椭圆,将代码中倒数第三个参数由180修改为360就可以了:

cv2.ellipse(img,(256,256),(100,50),0,0,360,255,-1)

若想画出空心圆,只需要将最后一个参数修改为正值,即为线宽:

cv2.ellipse(img,(256,256),(100,50),0,0,360,255,4)

效果↓:

▼画多边形

OpenCV中可以通过API进而画出多边形,其函数实例为:

pts=np.array([[20,20],[350,40],[420,400],[60,420]], np.int32)
pts = pts.reshape((-1,1,2))
img = cv2.polylines(img,[pts],True,(0,255,0),2)

cv2. polylines()有5个参数:图像名称,顶点列表(这个多边形在array中有四个顶点),True表示闭合,(0,255,255)是黄色,3是线宽。pts则是使用numpy构建的四个顶点的数组,这个数组的数据类型必须为 int32。

代码:

import cv2
import numpy as np
img = np.zeros((512, 512, 3), np.uint8)
pts=np.array([[20,20],[350,40],[420,400],[60,420]], np.int32)
pts=pts.reshape((-1,1,2))
cv2.polylines(img,[pts],True,(0,255,0),2)
cv2.imshow("img", img)
cv2.waitKey(0)
cv2.destroyAllWindows()

效果演示↓:

如果我修改顶点数组的顺序,就会得到不一样的结果:

pts=np.array([[20,20],[350,40],[60,420],[420,400]], np.int32)

效果↓:

▼在图片上添加文字

使用OpenCV我们可以在图像上添加文字,函数实例为:

font=cv2.FONT_HERSHEY_SIMPLEX
cv2.putText(img,'OpenCV',(10,250), font, 4,(255,255,255),2)

这个函数有八个参数,分别为:图像名称、字符串、坐标、字体、字号、(255,255,255)为白色、线宽为2。

当然,OpenCV是不支持添加中文的,要想添加中文的文字,可以添加中文的字库,也可以使用PIL来进行操作。官方解释不支持汉字是为了保持库的简单和轻量, 并且表明以后也不会支持中文,所以大家还是尽量使用英文,毕竟我们以后也是需要使用英文来阅读大量的文档的。

代码:

import cv2
import numpy as np
img=np.zeros((512,512,3), np.uint8)
font=cv2.FONT_HERSHEY_SIMPLEX
cv2.putText(img,'OpenCV',(10,250), font, 4,(255,255,255),2)
cv2.imshow("img",img)
cv2.waitKey(0)
cv2.destroyAllWindows()

效果演示↓:

至此,OpenCV的绘图功能基本上就这些了,需要特别注意的是

所 有 的 绘 图 函 数 的 返 回 值 都 是 None, 所 以 不 能 使 用 类似:img =cv2.line(img,(0,0),(511,511),(255,0,0),5),绘图函数直接调用即可。

Python OpenCV的绘图功能简介的更多相关文章

  1. 吴裕雄--天生自然python学习笔记:python OpenCV 基本绘图

    Open CV 提供了绘制直线.圆形.矩形等基本绘 图的功能 . Open CV 画直线的语法为: 在画布上添加文字的语法为 : 用 Open CV 绘制基本图形 以 OpenCV 基本绘图绘制各种图 ...

  2. python opencv:绘图 基本图形

    参数说明 • img:你想要绘制图形的那幅图像. • color:形状的颜色.以 RGB 为例,需要传入一个元组,例如:( 255,0,0)代表蓝色.对于灰度图只需要传入灰度值. • thicknes ...

  3. python强大的绘图模块matplotlib示例讲解

    Matplotlib 是 Python 的绘图库.作为程序员,经常需要进行绘图,在我自己的工作中,如果需要绘图,一般都是将数据导入到excel中,然后通过excel生成图表,这样操作起来还是比较繁琐的 ...

  4. 【Python | opencv+PIL】常见操作(创建、添加帧、绘图、读取等)的效率对比及其优化

    一.背景 本人准备用python做图像和视频编辑的操作,却发现opencv和PIL的效率并不是很理想,并且同样的需求有多种不同的写法并有着不同的效率.见全网并无较完整的效率对比文档,遂决定自己丰衣足食 ...

  5. PyQt(Python+Qt)学习随笔:QDial刻度盘部件功能简介

    专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 老猿学5G博文目录 一.概述 Designer中的Dial刻度盘输入部 ...

  6. PyQt(Python+Qt)学习随笔:QSlider滑动条部件功能简介

    专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 老猿学5G博文目录 一.概述 Designer输入部件中的Horizo ...

  7. opencv学习(三)——绘图功能

    绘图功能 我们将学习以下函数:cv.line(),cv.circle(),cv.rectangle(),cv.ellipse(),cv.putText()等. 在这些功能中,有一些相同的参数: img ...

  8. python OpenCV使用

    关于OpenCV简介  OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux.Windows.Android和Mac OS操作系统上.它轻量级而且高效——由一系列 C ...

  9. Python+OpenCV图像处理(一)

    Python+OpenCV图像处理(一): 读取,写入和展示图片 调用摄像头拍照 调用摄像头录制视频 1. 读取.写入和展示图片 图像读入:cv2.imread() 使用函数cv2.imread() ...

随机推荐

  1. SpringCloud多数据源实现

    1.枚举多数据源-定义一一对应变量 /** * * 列出所有的数据源key(常用数据库名称来命名) * 注意: * 1)这里数据源与数据库是一对一的 * 2)DatabaseType中的变量名称就是数 ...

  2. linux中c多线程同步方法

    https://blog.csdn.net/jkx01whg/article/details/78119189 Linux下提供了多种方式来处理线程同步,最常用的是互斥锁.条件变量和信号量. 一.互斥 ...

  3. 了解Nginx与PHP的交互?

    Nginx可以接收请求并转发给PHP-FPM. 1.开始深入Nginx与FastCGI协议 通过对Nginx新增Server配置实现了nginx与PHP的一次通信,配置文件非常简单. 从上图的Ngin ...

  4. 手把手教你学Numpy,这些api不容错过

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是Numpy专题的第5篇文章,我们来继续学习Numpy当中一些常用的数学和统计函数. 基本统计方法 在日常的工作当中,我们经常需要通过一 ...

  5. docker中mongdb常用操作

    一.进入 --使用本地命令行查看 docker exec -it mongos bash

  6. 多应用下 Swagger 的使用,这可能是最好的方式!

    问题 微服务化的时代,我们整个项目工程下面都会有很多的子系统,对于每个应用都有暴露 Api 接口文档需要,这个时候我们就会想到 Swagger 这个优秀 jar 包.但是我们会遇到这样的问题,假如说我 ...

  7. STL sort的comp函数注意事项

    今天写了个题,结果碰巧re了,我眉头一皱发现事情并不简单. 原来我之前的comp写的都是错的. bool cmp(milkman a,milkman b) { return a.price<=b ...

  8. (十一)Maven之profile实现多环境配置动态切换

    原文链接:https://www.cnblogs.com/zeng1994/p/a442108012ffd6a97b22c63055b48fe9.html 一.多环境配置文件的放置  将不同环境下的配 ...

  9. python生成批量格式化字符串

    在学习tensorflow管道化有关操作时,有一个操作是先生成一个文件名队列.在书上使用了这样的代码: filenames = ['test%d.txt'%i for in in range(1,4) ...

  10. Linux下搭建mysql

    [准备环境] Linux   centos7 [mysql安装步骤] 1.首先确定centos版本 cat /etc/redhat-release 2.yum安装 yum -y install mar ...