【Python Opencv】Opencv画图形

简介: 【Python Opencv】Opencv画图形

前言


在计算机视觉和图像处理中,OpenCV不仅可以处理图像和视频,还提供了一组功能强大的工具,用于在图像上绘制各种形状和图形。这些功能使得我们能够在图像上标注、分析和突出显示感兴趣的区域。本文将介绍如何使用Python和OpenCV绘制各种图形,包括线条、矩形、圆形等,以及如何添加文本。这对于图像处理和计算机视觉任务中的可视化和分析非常有用。


目标

学习使用 OpenCV 绘制不同的几何形状

您将学习这些函数:cv.line()、cv.circle()、cv.rectangle()、cv.ellipse()、cv.putText()等。


在上述所有函数中,您将看到一些常见参数,如下所示:


img :要绘制形状的图像

color :形状的颜色。对于 BGR,将其作为元组传递,例如:(255,0,0) 表示蓝色。对于灰度,只需传递标量值即可。

thickness : 线或圆等的厚度如果为圆形等闭合图形传递 -1,它将填充形状。默认厚度 = 1

lineType :线的类型,是否为 8 连接、抗锯齿线等,默认情况下,它是 8 连接的。 cv.LINE_AA提供了抗锯齿线,非常适合曲线。


一、画图形


1.1 画线

函数原型:

cv2.line(img, pt1, pt2, color, thickness, lineType, shift)


e0f11b117a7b4525a7563fb00f49d41c.png

参数说明:


img: 图像,要在其上绘制线条的图像。

pt1: 线条的起点坐标。

pt2: 线条的终点坐标。

color: 线条的颜色,通常是一个BGR元组,例如 (255, 0, 0) 表示蓝色。

thickness: 线条的宽度,整数值。

lineType: 线条的类型,可以是 cv2.LINE_4、cv2.LINE_8 或 cv2.LINE_AA。

shift: 像素坐标点的小数部分位数。

示例代码:

import cv2
import numpy as np
img = np.zeros((512, 512, 3), dtype=np.uint8)
cv2.line(img, (0, 0), (511, 511), (255, 0, 0), 5)
cv2.imshow('Line', img)
cv2.waitKey(0)
cv2.destroyAllWindows()


de7c0179a115495faa8fed9e89419791.png

1.2 画矩形

函数原型:

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


8c68fb888602484094c3121473a95bd5.png

参数说明:


img: 图像,要在其上绘制矩形的图像。

pt1: 矩形的左上角坐标。

pt2: 矩形的右下角坐标。

color: 矩形的颜色,通常是一个BGR元组。

thickness: 线条的宽度,整数值。如果为-1,表示填充矩形。

lineType: 线条的类型,可以是 cv2.LINE_4、cv2.LINE_8 或 cv2.LINE_AA。

shift: 像素坐标点的小数部分位数。

示例代码:

import cv2
import numpy as np
img = np.zeros((512, 512, 3), dtype=np.uint8)
cv2.rectangle(img, (100, 100), (300, 300), (0, 255, 0), 3)
cv2.imshow('Rectangle', img)
cv2.waitKey(0)
cv2.destroyAllWindows()


067e5f6f3a4248a78ea80cf8743d6a32.png

1.3 画圆

函数原型:

cv2.circle(img, center, radius, color, thickness, lineType, shift)


48823553b0de458c91d8604ba6fc11f4.png

参数说明:


img: 图像,要在其上绘制圆形的图像。

center: 圆心坐标。

radius: 圆的半径。

color: 圆的颜色,通常是一个BGR元组。

thickness: 线条的宽度,整数值。如果为-1,表示填充圆。

lineType: 线条的类型,可以是 cv2.LINE_4、cv2.LINE_8 或 cv2.LINE_AA。

shift: 像素坐标点的小数部分位数。

示例代码:

import cv2
import numpy as np
img = np.zeros((512, 512, 3), dtype=np.uint8)
cv2.circle(img, (250, 250), 150, (0, 0, 255), -1)
cv2.imshow('Circle', img)
cv2.waitKey(0)
cv2.destroyAllWindows()


ee8068469be84163aa54dfee2faa52c0.png

1.4 画椭圆

函数原型:

cv2.ellipse(img, center, axes, angle, startAngle, endAngle, color, thickness, lineType, shift)


1dc841521ee54a47a583457e02edb015.png

参数说明:


img: 图像,要在其上绘制椭圆的图像。

center: 椭圆中心坐标。

axes: 长轴和短轴的长度。

angle: 旋转角度。

startAngle: 椭圆弧的起始角度。

endAngle: 椭圆弧的结束角度。

color: 椭圆的颜色,通常是一个BGR元组。

thickness: 线条的宽度,整数值。如果为-1,表示填充椭圆。

lineType: 线条的类型,可以是 cv2.LINE_4、cv2.LINE_8 或 cv2.LINE_AA。

shift: 像素坐标点的小数部分位数。

示例代码:

import cv2
import numpy as np
img = np.zeros((512, 512, 3), dtype=np.uint8)
cv2.ellipse(img, (256, 256), (100, 50), 45, 0, 180, (255, 255, 0), -1)
cv2.imshow('Ellipse', img)
cv2.waitKey(0)
cv2.destroyAllWindows()


f33ab7a55f214a4897d2c609321ceee0.png


1.5 添加文本

  1. 添加文本:

函数原型:

cv2.putText(img, text, org, fontFace, fontScale, color, thickness, lineType, bottomLeftOrigin)


2dba563cf0c249d5b79d473329f60c62.png

参数说明:


img: 图像,要在其上添加文本的图像。

text: 要添加的文本字符串。

org: 文本的起始坐标,即基线左下角的点。

fontFace: 字体类型,例如 cv2.FONT_HERSHEY_SIMPLEX。

fontScale: 字体缩放因子。

color: 文本的颜色,通常是一个BGR元组。

thickness: 文本线条的宽度,整数值。

lineType: 线条的类型,可以是 cv2.LINE_4、cv2.LINE_8 或 cv2.LINE_AA。

bottomLeftOrigin: 如果为 True,则文本原点在左下角;如果为 False(默认),则原点在左上角。

示例代码:

import cv2
import numpy as np
img = np.zeros((512, 512, 3), dtype=np.uint8)
font = cv2.FONT_HERSHEY_SIMPLEX
cv2.putText(img, 'OpenCV', (10, 300), font, 4, (255, 255, 255), 2, cv2.LINE_AA)
cv2.imshow('Text', img)
cv2.waitKey(0)
cv2.destroyAllWindows()


5037ab0994374bf79b0dfab664630663.png


总结


使用OpenCV绘制图形是进行图像处理和计算机视觉任务中不可或缺的一部分。从简单的线条到复杂的文本,OpenCV提供了丰富的绘图功能。通过本文的介绍,你学会了如何在图像上绘制线条、矩形、圆形和文本,并可以根据需要调整颜色、大小和其他参数。这些技能对于图像分析、目标定位和可视化等任务都非常重要。希望这篇文章能够帮助你更好地利用OpenCV进行图形绘制。

相关文章
|
3月前
|
计算机视觉 Windows Python
windows下使用python + opencv读取含有中文路径的图片 和 把图片数据保存到含有中文的路径下
在Windows系统中,直接使用`cv2.imread()`和`cv2.imwrite()`处理含中文路径的图像文件时会遇到问题。读取时会返回空数据,保存时则无法正确保存至目标目录。为解决这些问题,可以使用`cv2.imdecode()`结合`np.fromfile()`来读取图像,并使用`cv2.imencode()`结合`tofile()`方法来保存图像至含中文的路径。这种方法有效避免了路径编码问题,确保图像处理流程顺畅进行。
298 1
|
18天前
|
数据可视化 算法 JavaScript
基于图论的时间序列数据平稳性与连通性分析:利用图形、数学和 Python 揭示时间序列数据中的隐藏模式
本文探讨了如何利用图论分析时间序列数据的平稳性和连通性。通过将时间序列数据转换为图结构,计算片段间的相似性,并构建连通图,可以揭示数据中的隐藏模式。文章介绍了平稳性的概念,提出了基于图的平稳性度量,并展示了图分区在可视化平稳性中的应用。此外,还模拟了不同平稳性和非平稳性程度的信号,分析了图度量的变化,为时间序列数据分析提供了新视角。
43 0
基于图论的时间序列数据平稳性与连通性分析:利用图形、数学和 Python 揭示时间序列数据中的隐藏模式
|
2月前
|
存储 计算机视觉
Opencv的基本操作(一)图像的读取显示存储及几何图形的绘制
本文介绍了使用OpenCV进行图像读取、显示和存储的基本操作,以及如何绘制直线、圆形、矩形和文本等几何图形的方法。
Opencv的基本操作(一)图像的读取显示存储及几何图形的绘制
|
30天前
|
计算机视觉 Python
python利用pyqt5和opencv打开电脑摄像头并进行拍照
本项目使用Python的PyQt5和OpenCV库实现了一个简单的摄像头应用。用户可以通过界面按钮打开或关闭摄像头,并实时预览视频流。点击“拍照”按钮可以捕捉当前画面并保存为图片文件。该应用适用于简单的图像采集和处理任务。
90 0
python利用pyqt5和opencv打开电脑摄像头并进行拍照
|
1月前
|
机器学习/深度学习 算法 计算机视觉
【Python篇】Python + OpenCV 全面实战:解锁图像处理与视觉智能的核心技能
【Python篇】Python + OpenCV 全面实战:解锁图像处理与视觉智能的核心技能
65 2
|
2月前
|
机器学习/深度学习 计算机视觉 Python
opencv环境搭建-python
本文介绍了如何在Python环境中安装OpenCV库及其相关扩展库,包括numpy和matplotlib,并提供了基础的图像读取和显示代码示例,同时强调了使用Python虚拟环境的重要性和基本操作。
|
3月前
|
算法 计算机视觉 Python
python利用opencv进行相机标定获取参数,并根据畸变参数修正图像附有全部代码(流畅无痛版)
该文章详细介绍了使用Python和OpenCV进行相机标定以获取畸变参数,并提供了修正图像畸变的全部代码,包括生成棋盘图、拍摄标定图像、标定过程和畸变矫正等步骤。
python利用opencv进行相机标定获取参数,并根据畸变参数修正图像附有全部代码(流畅无痛版)
|
3月前
|
存储 编解码 API
python多种方法压缩图片,opencv、PIL、tinypng、pngquant压缩图片
python多种方法压缩图片,opencv、PIL、tinypng、pngquant压缩图片
232 1
|
3月前
|
算法 定位技术 vr&ar
一文了解PnP算法,python opencv中的cv2.solvePnP()的使用,以及使用cv2.sovlePnP()方法标定相机和2D激光雷达
一文了解PnP算法,python opencv中的cv2.solvePnP()的使用,以及使用cv2.sovlePnP()方法标定相机和2D激光雷达
462 0
一文了解PnP算法,python opencv中的cv2.solvePnP()的使用,以及使用cv2.sovlePnP()方法标定相机和2D激光雷达
|
3月前
|
机器学习/深度学习 人工智能 监控
利用Python和OpenCV实现实时人脸识别系统
【8月更文挑战第31天】本文将引导您了解如何使用Python结合OpenCV库构建一个简易的实时人脸识别系统。通过分步讲解和示例代码,我们将探索如何从摄像头捕获视频流、进行人脸检测以及识别特定个体。本教程旨在为初学者提供一条明晰的学习路径,帮助他们快速入门并实践人脸识别技术。