【Python Opencv】Opencv画图形

文章目录

  • 前言
  • 一、画图形
    • [1.1 画线](#1.1 画线)
    • [1.2 画矩形](#1.2 画矩形)
    • [1.3 画圆](#1.3 画圆)
    • [1.4 画椭圆](#1.4 画椭圆)
    • [1.5 添加文本](#1.5 添加文本)
  • 总结

前言

在计算机视觉和图像处理中,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 画线

函数原型:

python 复制代码
cv2.line(img, pt1, pt2, color, thickness, lineType, shift)

参数说明:

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

pt1: 线条的起点坐标。

pt2: 线条的终点坐标。

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

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

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

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

示例代码:

python 复制代码
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()

1.2 画矩形

函数原型:

python 复制代码
cv2.rectangle(img, pt1, pt2, color, thickness, lineType, shift)

参数说明:

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

pt1: 矩形的左上角坐标。

pt2: 矩形的右下角坐标。

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

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

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

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

示例代码:

python 复制代码
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()

1.3 画圆

函数原型:

python 复制代码
cv2.circle(img, center, radius, color, thickness, lineType, shift)

参数说明:

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

center: 圆心坐标。

radius: 圆的半径。

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

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

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

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

示例代码:

python 复制代码
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()

1.4 画椭圆

函数原型:

python 复制代码
cv2.ellipse(img, center, axes, angle, startAngle, endAngle, color, thickness, lineType, shift)

参数说明:

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

center: 椭圆中心坐标。

axes: 长轴和短轴的长度。

angle: 旋转角度。

startAngle: 椭圆弧的起始角度。

endAngle: 椭圆弧的结束角度。

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

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

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

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

示例代码:

python 复制代码
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()

1.5 添加文本

  1. 添加文本:

函数原型:

python 复制代码
cv2.putText(img, text, org, fontFace, fontScale, color, thickness, lineType, bottomLeftOrigin)

参数说明:

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(默认),则原点在左上角。

示例代码:

python 复制代码
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()

总结

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

相关推荐
长不大的杨瑞杰5 小时前
OpenCode v2 运行时预热实战:Warming、Prompt Cache、后台服务与成本治理
人工智能·安全·云计算·软件工程·devops
晓天衡宇•评测社区5 小时前
当需求具体到图片尺寸,Nano Banana 2.1 交出了什么答案?
人工智能·计算机视觉
fruge6 小时前
没有独显也想做AI配音?我用MOSS-TTS-Nano在CPU电脑上跑通了本地语音生成
人工智能·电脑
天树星智源6 小时前
静态物理满分、交互 11.54%:3D 场景生成系统的幻觉
论文阅读·人工智能·3d·机器人
OpenAnolis小助手6 小时前
多租户公有云共享 CXL 内存池场景下的内存卸载研究
人工智能·操作系统·龙蜥社区·risc-v·agentic os
ShineWinsu6 小时前
对于Qt:QPushButton常见属性的解析
开发语言·c++·qt·api·gui·按钮·qpushbutton
外贸GEO优化6 小时前
外贸独立站的可抓取性:JS 渲染、懒加载与无限滚动到底影响什么
开发语言·javascript·ecmascript
飞浪纪元[FWC–FE]6 小时前
Qt 工程创建与 CMake / qmake 构建规范
开发语言·数据库·qt
xsd202411186 小时前
OCEC 24×40 开闭眼脑电分类:从 α 波节律到实时 BCI 落地方案
人工智能·1024程序员节