OpenCV绘制图像与文字(可作为脚手架代码)(python) Open_CV系列(四)(上)

简介: OpenCV绘制图像与文字(可作为脚手架代码)(python) Open_CV系列(四)

文章目录


关于本期blog,一个值得注意的细节:

在前边文章中修改个别像素值的时候,我们可以对像素数组组直接取某个像素时,如


image[300, 200] = [255, 255, 255]


即 把以左上角为画布坐标原点,竖直方向上第301个,水平方向上第201个像素修改为白色。


但是在本篇中,为了更加快捷高效地操作像素,我们将使用OpenCV提供的一系列操作像素的方法,在以下方法中,通常需要传入坐标点。这里传入的坐标点,与上边手动操作像素时的坐标点有所不同,这里通常是传入一个数组 如(a, b),来表示坐标。依然是以左上角为画布的坐标原点,但是a的位置是水平方向,b的位置是数值方向。这一点与手动操作是相反的。学习过程中要注意到这个细节。

1. cv2.line()绘制线段

语法

cv2.line()

line(img, pt1, pt2, color, thickness=None, lineType=None, shift=None)


  • img 即表示画布(图像)的数组
  • pt1指起始点的坐标,元组格式
  • pt2指结束点的坐标,元组格式
  • color 表示颜色的元组,如在BGR色彩空间中,(255, 0, 0)表示蓝色,(0, 255, 0)表示绿色,(0, 0, 255)表示红色。
  • thickness 线条宽度
  • lineType 线条产生的算法类型,可以是4或者8,默认为8。两种算法绘制出的线条视觉上看不出差别。


以绘制四条不同的颜色、粗细程度,并依次首尾相连的线段。

import numpy as np
import cv2
# 创建画布(黑色画布)(三维数组)
canvas = np.zeros((300, 300, 3), np.uint8)
# canvas = np.ones((300, 300, 3), np.uint8) * 255  # 如果创建白色画布
canvas = cv2.line(canvas, (50, 50), (50, 250), (255, 0, 0), 5)
canvas = cv2.line(canvas, (50, 250), (250, 250), (0, 255, 0), 10)
canvas = cv2.line(canvas, (250, 250), (250, 50), (0, 0, 255), 15)
canvas = cv2.line(canvas, (250, 50), (50, 50), (0, 255, 255), 20)
cv2.imshow("Lines", canvas)
cv2.waitKey()
cv2.destroyAllWindows()

程序执行结果如图所示:

1.png

2. cv2.rectangle() 绘制矩形

语法

cv2.rectangle(img, pt1, pt2, color, thickness=None, lineType=None, shift=None)


pt1表示矩形左上角坐标,pt2表示矩形右下角坐标。其他参数语法同上。

thickness如果为负责表示所绘图形为实心图形,内部采用颜色填充。

以白色为画布底色为例。

import numpy as np
import cv2
canvas = np.ones((500, 600, 3), np.uint8) * 255
canvas = cv2.rectangle(canvas, (150, 200), (400, 350), (255, 255, 0), 20)
cv2.imshow("Rectangle", canvas)
cv2.waitKey()
cv2.destroyAllWindows()

1.png

3. cv2.circle() 绘制圆形

circle(img, center, radius, color, thickness=None, lineType=None, shift=None)

  • center 为圆心坐标
  • radius为半径长度

3.1 绘制实现圆 与 空心圆

import numpy as np # 导入Python中的numpy模块
import cv2
canvas = np.ones((500, 500, 3), np.uint8) * 255
# 绘制三个实心圆和一个空心圆
canvas = cv2.circle(canvas, (100, 100), 80, (0, 0, 255), -1)
canvas = cv2.circle(canvas, (250, 250), 80, (0, 255, 255), -1)
canvas = cv2.circle(canvas, (400, 400), 80, (0, 255, 0), -1)
canvas = cv2.circle(canvas, (400, 100), 80, (0, 0, 0), 5)
cv2.imshow("TrafficLights", canvas) # 显示画布
cv2.waitKey()
cv2.destroyAllWindows()

1.png

3.2 绘制同心圆

import numpy as np
import cv2
canvas = np.zeros((600, 600, 3), np.uint8)
center_X = int(canvas.shape[1] / 2)
center_Y = int(canvas.shape[0] / 2)
for r in range(0, 300, 30):
    cv2.circle(canvas, (center_X, center_Y), r, (0, 255, 0), 5)
cv2.imshow("Circles", canvas)
cv2.waitKey()
cv2.destroyAllWindows()

代码效果如下

1.png

3.3 绘制随机圆

import numpy as np
import cv2
canvas = np.zeros((600, 600, 3), np.uint8)
for numbers in range(0, 100):
    center_X = np.random.randint(0, high=600)
    center_Y = np.random.randint(0, high=600)
    radius = np.random.randint(10, high=150)
    color = np.random.randint(0, high=256, size=(3,)).tolist()
    cv2.circle(canvas, (center_X, center_Y), radius, color, -1)
cv2.imshow("Circles", canvas)
cv2.waitKey()
cv2.destroyAllWindows()

效果展示如下:

1.png

4. cv2.polylines() 绘制多边形

语法

polylines(img, pts, isClosed, color, thickness=None, lineType=None, shift=None)

  • img 画布/图像数组
  • pts 是一个列表,列表内是一个shape为(n,2)的numpy数组:形如[[a, b], [c, d], [e, f], [g, h], …],存放的是多边形每个顶点的坐标。
  • isClosed 是否闭合。没有默认值,必须手动传入。如果为True则表示是一个闭合的多边形;如果为False则表示不闭合。
import numpy as np
import cv2
canvas = np.ones((500, 500, 3), np.uint8) * 255
pts = np.array([[100, 50], [250, 50], [350, 250], [100, 300], [50, 100]], np.int32)
# 注意,pts是一个列表,数组的外边还要加一组括号才可正常运行。
canvas = cv2.polylines(canvas, [pts], True, (0, 255, 255), 5)
cv2.imshow("Polylines", canvas)
cv2.waitKey()
cv2.destroyAllWindows()

1.png

目录
相关文章
|
6天前
|
Python
以下是一些常用的图表类型及其Python代码示例,使用Matplotlib和Seaborn库。
以下是一些常用的图表类型及其Python代码示例,使用Matplotlib和Seaborn库。
|
4天前
|
Python
? Python 装饰器入门:让代码更灵活和可维护
? Python 装饰器入门:让代码更灵活和可维护
11 4
|
4天前
|
缓存 测试技术 Python
探索Python中的装饰器:简化代码,提高可读性
【9月更文挑战第28天】在Python编程中,装饰器是一个强大的工具,它允许我们在不修改原有函数代码的情况下增加额外的功能。本文将深入探讨装饰器的概念、使用方法及其在实际项目中的应用,帮助读者理解并运用装饰器来优化和提升代码的效率与可读性。通过具体示例,我们将展示如何创建自定义装饰器以及如何利用它们简化日常的编程任务。
10 3
|
3天前
|
机器学习/深度学习 数据格式 Python
将特征向量转化为Python代码
将特征向量转化为Python代码
10 1
|
4天前
|
人工智能 小程序 API
文字转语音神器+Python编程搞定语音报时小程序
文字转语音神器+Python编程搞定语音报时小程序
11 2
|
6天前
|
JavaScript 前端开发 Python
python执行js代码
本文档详细介绍如何安装Node.js环境及PyExecJS库,并提供示例代码展示其功能。首先,通过指定链接安装Node.js,安装完毕后可在命令行中输入`node --version`来验证安装是否成功。接着,使用`pip install PyExecJS`安装PyExecJS库,该库允许Python程序执行JavaScript代码。文档还提供了多个示例代码,展示了如何在Python环境中执行和编译JavaScript代码,并可以选择特定的JavaScript运行时环境,如Node.js或JScript。最后,通过具体案例展示了PyExecJS的功能与使用方法。
14 3
|
5天前
|
Python
Python 装饰器入门:让代码更灵活和可维护
Python 装饰器入门:让代码更灵活和可维护
10 1
|
5天前
|
机器学习/深度学习 计算机视觉 Python
opencv环境搭建-python
本文介绍了如何在Python环境中安装OpenCV库及其相关扩展库,包括numpy和matplotlib,并提供了基础的图像读取和显示代码示例,同时强调了使用Python虚拟环境的重要性和基本操作。
|
6天前
|
Python
5-19|记录Python调用salt代码
5-19|记录Python调用salt代码
|
5天前
|
数据处理 Python
Python切片魔法:一行代码实现高效数据处理
Python切片魔法:一行代码实现高效数据处理
10 0
下一篇
无影云桌面