小强学Python+OpenCV之-1.3绘图

小强学Python+OpenCV之-1.3绘图

大家好,又见面了,我是全栈君。

目标

今天的课程比较轻松,我们来学习一下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如下图所示:


小强学Python+OpenCV之-1.3绘图

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如下图所示:


小强学Python+OpenCV之-1.3绘图

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如下图所示:


小强学Python+OpenCV之-1.3绘图

image.png

总结

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

  1. np.zeros在传入参数时,注意:高度在前,宽度在后
  2. 默认线宽为1
  3. 线宽指定为-1时表示填充
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/108484.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 分布式

    分布式

    2021年3月12日
    122
  • zencart模板,外贸鞋子模板

    zencart模板,外贸鞋子模板演示地址:http://www.zentem.com/shoes1

    2022年7月27日
    1
  • java.math.BigDecimal 比较大小

    java.math.BigDecimal 比较大小BigDecimala=newBigDecimal(101);BigDecimalb=newBigDecimal(111);//使用compareTo方法比较//注意:a、b均不能为null,否则会报空指针if(a.compareTo(b)==-1){System.out.println("a小于b");}if(a.compareTo(b)==…

    2022年7月14日
    29
  • spring boot之端口设置和contextpath的配置[通俗易懂]

    spring boot之端口设置和contextpath的配置[通俗易懂]端口设置Springboot默认端口是8080,如果想要进行更改的话,只需要修改applicatoin.properties文件,在配置文件中加入:1server.port=9090常用配置:1234567891011121314151617

    2022年9月2日
    7
  • RTP 协议

    RTP 协议原博客地址:http://www.cnblogs.com/qingquan/archive/2011/07/28/2120440.html概述:实时传送协议(Real-timeTransportProtocol或简写RTP,也可以写成RTTP)是一个网络传输协议,它是由IETF的多媒体传输工作小组1996年在RFC1889中公布的。RTP协议详细说明了在互联网上传递音频和视频的标…

    2022年6月28日
    31
  • scrollIntoView()的用法[通俗易懂]

    scrollIntoView()的用法[通俗易懂]STARTscrollIntoView是一个与页面(容器)滚动相关的API(官方解释),该API只有boolean类型的参数能得到良好的支持(firefox36+都支持),所以在这里只讨论参数Boolean类型的情况。EXPLAIN调用方法为element.scrollIntoView()参数默认为true。参数为true时调用该函数,页面(或容器)发生滚动,使elem…

    2022年6月18日
    37

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号