绘图功能

我们将学习以下函数:cv.line(),cv.circle(),cv.rectangle(),cv.ellipse(),cv.putText()等。

在这些功能中,有一些相同的参数:

  • img:你要绘制形状的图像。
  • 形状的颜色。对于BGR,将其作为元组传递,例如:(255,0,0)对于蓝色。对于灰度,只需传递标量值即可。
  • thickness: 线或圆等的厚度。如果传 -1 就是像圆的闭合图形,它将填充形状。默认 thickness = 1。
  • lineType:线条类型,如 8 连接线,抗锯齿线等。默认情况下,是 8 连接线。cv.LINE_AA给出了抗锯齿的线条,看起来非常适合曲线。

一、画线

要绘制一条线,需要传递线的开始和结束坐标。我们将创建一个黑色图像,并从左上角到右下角在其上绘制一条蓝线。

import cv2
import numpy as np def cv_show(name, img):
cv2.imshow(name, img)
cv2.waitKey(0)
cv2.destroyAllWindows() #创建黑色的图像
img = np.zeros((512, 512, 3), np.uint8)
#绘制一条厚度为5的蓝色对角线
line = cv2.line(img, (0, 0), (511, 511), (255, 0, 0), 5)
cv_show('line', line)

二、画矩形

要绘制矩形,需要矩形的左上角和右下角。这次,我们将在图像的右上角绘制一个绿色矩形。

rectangle = cv2.rectangle(img, (384, 0), (510, 128), (0, 255, 0), 3)
cv_show('rectangle', rectangle)

三、画圆圈

要绘制一个圆,需要其中心坐标和半径。我们将在上面绘制的矩形内绘制一个圆。

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

四、画椭圆

要绘制椭圆,我们需要传递几个参数。一个参数是中心位置(x,y)。第二个参数是轴长度(长轴长度,短轴长度)。angle是椭圆沿逆时针方向旋转的角度。startAngle和endAngle表示从主轴沿顺时针方向测量的椭圆弧的开始和结束。如整圆就传 0 和 360。

elipse = cv2.ellipse(img, (256, 256), (100, 50), 0, 0, 180, (15, 255, 212), -1)
cv_show('elipse', elipse)

五、画多边形

要绘制多边形,首先需要顶点的坐标。将这些点组成形状为 ROWSx1x2 的数组,其中 ROWS 是顶点数,并且其类型应为int32。在这里,我们绘制了一个带有四个顶点的黄色小多边形。

pts = np.array([
[10, 5],
[20, 30],
[70, 20],
[50, 10]
], np.int32)
pts = pts.reshape((4, 1, 2))
polylines = cv2.polylines(img, [pts], True, (0, 255, 255))
cv_show('polylines', polylines)

如果第三个参数为False,您将获得一条连接所有点的折线,而不是闭合形状。cv.polylines()可用于绘制多条线。只需创建要绘制的所有线条的列表,然后将其传递给函数即可。所有线条将单独绘制。与为每条线调用cv.line相比,绘制一组线是一种更好,更快的方法。

六、向图像添加文本

在图像上加文字,你需要指定以下内容。

  • 你想写的文字数据。
  • 你想写的位置坐标 (如 左下角开始)。
  • 字体类型。
  • 常规的如颜色,粗细,线型等。为了更好看,线型使用 lintType = cv.LINE_AA。

我们将在图像上写一个白色的 ”OpenCV“。

font = cv2.FONT_HERSHEY_SIMPLEX
text = cv2.putText(img, 'OpenCV', (10, 500), font, 4, (255, 255, 255), 2, cv2.LINE_AA)
cv_show('text', text)

七、画OpenCV的logo

import cv2
import numpy as np def cv_show(name, img):
cv2.imshow(name, img)
cv2.waitKey(0)
cv2.destroyAllWindows() #创建黑色背景
background = np.zeros((512, 512, 3), np.uint8) #画红圆
red_circle = cv2.circle(background, (256, 122), 50, (0, 0, 255), 40)
cv_show('red_circle', red_circle) #画绿圆
green_circle = cv2.circle(background, (172, 282), 50, (0, 255, 0), 40)
cv_show('green_circle', green_circle) #画蓝圆
blue_circle = cv2.circle(background, (342, 282), 50, (255, 0, 0), 40)
cv_show('blue_circle', blue_circle) #画线(三角形)
pts1 = np.array([
[256, 122],
[202, 202],
[312, 202]
], np.int32)
pts1.reshape((3, 1, 2))
pts2 = np.array([
[162, 282],
[196, 202],
[270, 278]
], np.int32)
pts2.reshape((3, 1, 2))
pts3 = np.array([
[352, 282],
[292, 202],
[402, 202]
], np.int32)
pts3.reshape((3, 1, 2))
fillline = cv2.fillPoly(background, [pts1, pts2, pts3], (0, 0, 0))
cv_show('fillline', fillline)

opencv学习(三)——绘图功能的更多相关文章

  1. Python OpenCV的绘图功能简介

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:大Z 在图像中我们经常需要用到将某个局部特征画出来,比如物体检测,物 ...

  2. opencv学习笔记(三)基本数据类型

    opencv学习笔记(三)基本数据类型 类:DataType 将C++数据类型转换为对应的opencv数据类型 OpenCV原始数据类型的特征模版.OpenCV的原始数据类型包括unsigned ch ...

  3. 第三篇 功能实现(3) (Android学习笔记)

    第三篇 功能实现(3) ●发一个广播和启动一个隐式的Intent非常像,那么它们之间有什么区别呢? Implicit Intents (sent via startActivity( )) and B ...

  4. 第三篇 功能实现(2) (Android学习笔记)

    第三篇 功能实现(2) ●Activity的四种启动模式 Activity的启动模式有四种,分别是standard.singleTop.singleTask和singleInstance. 在Andr ...

  5. 1.3 操作系统的第三个功能——存储管理功能 -《zobolの操作系统学习札记》

    1.3 操作系统的第三个功能--存储管理功能 作者zobol:关于操作系统概论-存储管理功能,我给出下列问题: 目录 1.3 操作系统的第三个功能--存储管理功能 问1:操作系统的文件管理系统主要是负 ...

  6. 第三篇 功能实现(1) (Android学习笔记)

    第三篇 功能实现(1) 第8章 Android应用程序组成 ●Android的一些中.底层基础知识 ※ Android Framework 启动过程 Android手机系统本质上是一个基于Linux的 ...

  7. OpenCV-Python 绘图功能 | 七

    目标 学习使用OpenCV绘制不同的几何形状 您将学习以下功能:cv.line(),cv.circle(),cv.rectangle(),cv.ellipse(),cv.putText()等. 代码 ...

  8. OpenCV学习笔记(27)KAZE 算法原理与源码分析(一)非线性扩散滤波

    http://blog.csdn.net/chenyusiyuan/article/details/8710462 OpenCV学习笔记(27)KAZE 算法原理与源码分析(一)非线性扩散滤波 201 ...

  9. [OpenCV学习笔记3][图像的加载+修改+显示+保存]

    正式进入OpenCV学习了,前面开始的都是一些环境搭建和准备工作,对一些数据结构的认识主要是Mat类的认识: [1.学习目标] 图像的加载:imread() 图像的修改:cvtColor() 图像的显 ...

随机推荐

  1. undefined reference to `recvIpcMsg(int, ipc_msg*)'——#ifdef __cplusplus extern "C" { #endif

    最近在弄一个进程间通信,原始测试demon用c语言写的,经过测试ok,然后把接口封装起来了一个send,一个recv. 使用的时候send端是在一个c语言写的http服务端使用,编译ok没有报错,但是 ...

  2. ST表 求 RMQ(区间最值)

    RMQ即Range Minimum/Maximun Query,中文意思:查询一个区间的最小值/最大值 比如有这样一个数组:A{3 2 4 5 6 8 1 2 9 7},然后问你若干问题: 数组A下标 ...

  3. Go语言核心36讲(Go语言进阶技术十四)--学习笔记

    20 | 错误处理 (下) 在上一篇文章中,我们主要讨论的是从使用者的角度看"怎样处理好错误值".那么,接下来我们需要关注的,就是站在建造者的角度,去关心"怎样才能给予使 ...

  4. TCP粘"包"问题浅析及解决方案Golang代码实现

    一.粘"包"问题简介 在socket网络编程中,都是端到端通信,客户端端口+客户端IP+服务端端口+服务端IP+传输协议就组成一个可以唯一可以明确的标识一条连接.在TCP的sock ...

  5. Jenkins+SVN+Maven+testNG管理项目

    1.登录访问:http://localhost:8080/jenkins 2.系统管理 => 全局工具配置 => ADD JDK  AND  Add Maven 3.安装SVN插件:系统管 ...

  6. 攻防世界 Misc 新手练习区 gif Writeup

    攻防世界 Misc 新手练习区 gif Writeup 题目介绍 题目考点 仔细联想 字符转换 Writeup 下载附件并打开 104张黑白图 发现是一堆黑色和白色的图片,按某种规律排列,猜想flag ...

  7. robot_framewok自动化测试--(6)Collections 库

    Collections 库 Collections 库同样为 Robot Framework 标准类库,它所提供的关键字主要用于列表.索引.字典的处理. 在使用之前需要在测试套件(项目)中添加: 1. ...

  8. 大一C语言学习笔记(5)---函数篇-定义函数需要了解注意的地方;定义函数的易错点;详细说明函数的每个组合部分的功能及注意事项

    博主学习C语言是通过B站上的<郝斌C语言自学教程>,对于C语言初学者来说,我认为郝斌真的是在全网C语言学习课程中讲的最全面,到位的一个,这个不是真不是博主我吹他哈,大家可以去B站去看看,C ...

  9. Django笔记&教程 6-1 表单(Form)介绍

    Django 自学笔记兼学习教程第6章第1节--表单(Form)介绍 点击查看教程总目录 1 介绍 如果网站要让用户输入并提交数据(比如注册登录),则需要用到表单. 单纯的html也能写出表单,格式一 ...

  10. 论文解读(Line)《LINE: Large-scale Information Network Embedding》

    论文题目:<LINE: Large-scale Information Network Embedding>发表时间:  KDD 2015论文作者:  Jian Tang, Meng Qu ...