目标

今天的课程比较轻松,我们来学习一下OpenCV中几个绘图函数:

  1. cv2.line
  2. cv2.rectangle
  3. cv2.circle

画直线

直接经过前面两节的内容。我想直接上代码应该是可以接受的。创建一个Python脚本,取名draw.py

# 导入库 import numpy as np import cv2  # 初始化一块400*600的画布(相当于生成一个numpy数组,也就是一幅图像),注意这里的画布是三通道的,也就是彩色图像 canvas = np.zeros((400, 600, 3), dtype="uint8")  # 画一条绿线 green = (0, 255, 0) # 起点(0, 0)至终点(600, 400),颜色绿色。PS.这里有一个默认参数,线宽默认为1个像素 cv2.line(canvas, (0, 0), (600, 400), green) cv2.imshow("Canvas", canvas) cv2.waitKey(0)  # 画一条红线 red = (0, 0, 255) # 起点(600, 0)至终点(0, 400),颜色红色。线宽指定为3个像素 cv2.line(canvas, (600, 0), (0, 400), red, 3) cv2.imshow("Canvas", canvas) cv2.waitKey(0)

执行代码python draw.py如下图所示:

image.png
这里要注意的两点:
  1. 使用np.zeros函数的第一个参数接收了一个list(400,600,3),表示生成numpy矩阵,用来表示一个400(高度)* 600(宽度),3通道(彩色)图像。注意:高度400在前,宽度600在后
  2. cv2.line函数,第一个参数表示一幅(用nympy矩阵表示的)图像,第二个参数表示要画的线的起点坐标(注意:坐标表示为(x,y)形式,x表示哪一列,y表示哪一行,即宽度在前,高度在后),第三个参数表示要画的线的终点,第四个参数表示线的颜色,第五个参数表示线宽(默认线宽为1个像素)。wendinyule.cn  dazhonyule.cn

画矩形

在上面的代码后面,接着增加如下代码:

# 在坐标(10,10)画一个50*50大小的,绿色的矩形,线宽使用默认值1(像素) cv2.rectangle(canvas, (100, 100), (150, 150), green) cv2.imshow("Canvas", canvas) cv2.waitKey(0)  # 用5个像素的线宽再画一个红色矩形,线宽为5 cv2.rectangle(canvas, (150, 200), (250, 225), red, 5) cv2.imshow("Canvas", canvas) cv2.waitKey(0)  # 画一个填充矩形 blue = (255, 0, 0) # 画一个蓝色矩形,线宽为-1(-1表示填充) cv2.rectangle(canvas, (300, 50), (325, 125), blue, -1) cv2.imshow("Canvas", canvas) cv2.waitKey(0)

执行代码python draw.py如下图所示:

image.png
使用cv2.rectangle时注意:
  1. 默认线宽为1
  2. 线宽指定为-1时表示填充

画圆

继续追加代码如下:

# 白色可以用BGR三通道都是255来表示 white = (255, 255, 255)  # 在(300,300)处画一个圆,半径50,线宽为3 cv2.circle(canvas, (300, 300), 50, white)  # 我们可以组一个自己的颜色,比如: color = (255, 0, 255)  # 在(500,200)处画一个圆,半径40,线宽为3 cv2.circle(canvas, (500, 200), 40, color, -1) cv2.imshow("Canvas", canvas) cv2.waitKey(0)

执行代码python draw.py如下图所示:

image.png

总结

我们学会了使用cv2.line、cv2.rectangle、cv2.circle三个函数。要注意的事项,再在这里重复一下:

  1. np.zeros在传入参数时,注意:高度在前,宽度在后
  2. 默认线宽为1
  3. 线宽指定为-1时表示填充

小强学Python+OpenCV之-1.3绘图的更多相关文章

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

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

  2. Python OpenCV的绘图功能简介

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

  3. python OpenCV使用

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

  4. 【Python五篇慢慢弹】快速上手学python

    快速上手学python 作者:白宁超 2016年10月4日19:59:39 摘要:python语言俨然不算新技术,七八年前甚至更早已有很多人研习,只是没有现在流行罢了.之所以当下如此盛行,我想肯定是多 ...

  5. 《趣学Python编程》

    <趣学Python编程> 基本信息 作者: (美)Jason Briggs 译者: 尹哲 出版社:人民邮电出版社 ISBN:9787115335951 上架时间:2014-2-21 出版日 ...

  6. 小白学 Python(24):Excel 基础操作(下)

    人生苦短,我选Python 前文传送门 小白学 Python(1):开篇 小白学 Python(2):基础数据类型(上) 小白学 Python(3):基础数据类型(下) 小白学 Python(4):变 ...

  7. 小白学 Python 数据分析(19):Matplotlib(四)常用图表(下)

    人生苦短,我用 Python 前文传送门: 小白学 Python 数据分析(1):数据分析基础 小白学 Python 数据分析(2):Pandas (一)概述 小白学 Python 数据分析(3):P ...

  8. 如何让一张图片变成二值图像?python+opencv图像处理

    前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:张熹熹 PS:如有需要Python学习资料的小伙伴可以加点击下方链接自 ...

  9. 趣学Python编程PDF高清完整版免费下载|百度网盘

    百度网盘:趣学Python编程PDF高清完整版免费下载 提取码:ts47 内容简介 python是一款解释型.面向对象.动态数据类型的高级程序设计语言.python语法简捷而清晰,具有丰富和强大的类库 ...

随机推荐

  1. python_第一章

    从今天开始,正式开始学习python书籍:python 编程:从入门到实践. 感兴趣的读者可以去网上搜索这本书,适合读者入门,读下来,不会有任何 晦涩难懂的知识. 1.排序: 正排:sort()    ...

  2. spring boot 跨域请求

    场景 网站localhost:56338要访问网站localhost:3001的服务 在网站localhost:3001中增加CORS相关Java Config @Configuration @Ord ...

  3. C#基础巩固(1)-多态+简单工厂

    多态 如果要简要的描述多态的话,我个人是这样理解的:通过继承,父类定义方法,具休的实现由子类进行. 01代码 //父类 class Person { public virtual void skill ...

  4. Luogu P1341 无序字母对

    突然发现我现在很喜欢打图论题. 然而都是很easy的. 这道题很坑,用C++打了一遍莫名Too many or too few lines. 然后我打出了我的独门绝技Pascal.这可能是我最后一次用 ...

  5. item 7:当创建对象的时候,区分()和{}的使用

    本文翻译自modern effective C++,由于水平有限,故无法保证翻译完全正确,欢迎指出错误.谢谢! 博客已经迁移到这里啦 从不同的角度来看,在C++11中,对象初始化拥有多种语法选择,这体 ...

  6. CSS 内边距 (padding) 实例

    CSS 内边距 (padding) 实例元素的内边距在边框和内容区之间.控制该区域最简单的属性是 padding 属性. CSS padding 属性定义元素边框与元素内容之间的空白区域.CSS 内边 ...

  7. M2阶段测试报告

    一.安全漏洞测试报告: http://files.cnblogs.com/hotsbuaa/M2-安全漏洞测试.pdf 二.全面兼容测试: http://files.cnblogs.com/hotsb ...

  8. 2-Twenty Fifth Scrum Meeting-20151231

    前言 因为服务器关闭,我们的开发项目也遭遇停滞一个星期.与网站开发负责人员协商之后,29号开放服务器.我们的项目也能够继续下去.比规定的开发时间(截止为2015/12/29)推迟. 事项安排 1.开发 ...

  9. Github的建立及心得体会

    第一次接触Github,这次注册最大的难处就是全英文,着实看不懂.仅凭着认识的几个常用词去了解个具体内容实在是太困难了.所以第一个体会就是要好好学英语背单词,不想看到满屏的英文就感觉头疼,烦躁.第二个 ...

  10. JAVA面对对象(四)——抽象类

    抽象类的作用类似“模板”,可以根据它的格式来修改.创建新的类:但是不能直接由抽象类创建对象只能通过抽象类派生出新的类,再由它来创建对象:抽象类的使用同样是单继承,即一个子类只能继承一个抽象类 抽象类的 ...