小强学Python+OpenCV之-1.3绘图

作者: Eric_AIPO | 来源:发表于2017-05-21 00:04 被阅读432次

目标

今天的课程比较轻松,我们来学习一下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个像素)。

画矩形

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

# 在坐标(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时表示填充

相关文章

网友评论

  • 03f2b016f01f:在用鼠标绘制矩形的时候,怎么绘制矩形框?cv2.rectangle的最后一个参数若是-1,会绘制出填充矩形,没错。但是如果改为3,或者改为100。并不会变成矩形框,而只是改变填充矩形的边角形状。
    03f2b016f01f:@Eric_AIPO 我就是不知道如何用鼠标绘制矩形,才求教的。
    Eric_AIPO:@LeBronChen 这个功能还是比较单一的,不妨贴一下你的代码。
  • 57c531a8839f:挺详细的 可以放到csdn去 那里更多人看
    57c531a8839f:@Eric_AIPO 哦哦 我在csdn看了很多都不够详细 都是直接翻译opencv tutorial的,你的文章很详细,十分感谢
    Eric_AIPO: @啊P先生 简书上的都同步到csdn了。不过最近比较忙,有段时间没有更新了。过了这段时间加快速度。

本文标题:小强学Python+OpenCV之-1.3绘图

本文链接:https://www.haomeiwen.com/subject/ygxmxxtx.html