当前位置: 首页 > news >正文

【Python Opencv】Opencv画图形

文章目录

  • 前言
  • 一、画图形
    • 1.1 画线
    • 1.2 画矩形
    • 1.3 画圆
    • 1.4 画椭圆
    • 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 画线

函数原型:

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: 像素坐标点的小数部分位数。
示例代码:

import cv2
import numpy as npimg = 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 画矩形

函数原型:

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: 像素坐标点的小数部分位数。
示例代码:

import cv2
import numpy as npimg = 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 画圆

函数原型:

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: 像素坐标点的小数部分位数。
示例代码:

import cv2
import numpy as npimg = 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 画椭圆

函数原型:

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: 像素坐标点的小数部分位数。
示例代码:

import cv2
import numpy as npimg = 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. 添加文本:

函数原型:

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

import cv2
import numpy as npimg = 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进行图形绘制。

相关文章:

  • 数据库恢复技术
  • Linux进程间通信之命名管道及SystemV共享内存
  • 2023年09月青少年软件编程(C语言)等级考试试卷(三级)
  • 卡尔曼家族从零解剖-(06) 一维卡尔曼滤波编程实践
  • linux下使用Docker Compose部署Spug实现公网远程访问
  • 短视频矩阵seo系统源码搭建----技术定制化开发
  • MySQL基础知识题目
  • 飞腾ARM UOS编译Qt 5.15.2源码及Qt Creator
  • Python高级语法----使用Python进行模式匹配与元组解包
  • Rust编程中的线程间通信
  • 行业洞察:分布式云如何助力媒体与娱乐业实现创新与增长?
  • 【PC】开发者日志:竞技比赛验证系统强化
  • 14. 机器学习——kNN
  • NOIP2023模拟16联测37 小猫吃火龙果
  • PHP7使用C++扩展开发
  • 《微软的软件测试之道》成书始末、出版宣告、补充致谢名单及相关信息
  • 【108天】Java——《Head First Java》笔记(第1-4章)
  • 4. 路由到控制器 - Laravel从零开始教程
  • k个最大的数及变种小结
  • LeetCode18.四数之和 JavaScript
  • PHP 的 SAPI 是个什么东西
  • Python学习之路13-记分
  • Redash本地开发环境搭建
  • 成为一名优秀的Developer的书单
  • 初探 Vue 生命周期和钩子函数
  • 从setTimeout-setInterval看JS线程
  • - 概述 - 《设计模式(极简c++版)》
  • 好的网址,关于.net 4.0 ,vs 2010
  • 离散点最小(凸)包围边界查找
  • 扑朔迷离的属性和特性【彻底弄清】
  • 一个6年java程序员的工作感悟,写给还在迷茫的你
  • 一些css基础学习笔记
  • 异常机制详解
  • 原创:新手布局福音!微信小程序使用flex的一些基础样式属性(一)
  • 云栖大讲堂Java基础入门(三)- 阿里巴巴Java开发手册介绍
  • No resource identifier found for attribute,RxJava之zip操作符
  • puppet连载22:define用法
  • 策略 : 一文教你成为人工智能(AI)领域专家
  • ​​​​​​​​​​​​​​汽车网络信息安全分析方法论
  • ​什么是bug?bug的源头在哪里?
  • #!/usr/bin/python与#!/usr/bin/env python的区别
  • #在 README.md 中生成项目目录结构
  • ( 10 )MySQL中的外键
  • (机器学习-深度学习快速入门)第一章第一节:Python环境和数据分析
  • (力扣记录)1448. 统计二叉树中好节点的数目
  • (三)Honghu Cloud云架构一定时调度平台
  • (一)Java算法:二分查找
  • (原創) 如何安裝Linux版本的Quartus II? (SOC) (Quartus II) (Linux) (RedHat) (VirtualBox)
  • (转)IIS6 ASP 0251超过响应缓冲区限制错误的解决方法
  • (转)Linq学习笔记
  • .net core 实现redis分片_基于 Redis 的分布式任务调度框架 earth-frost
  • .net 程序发生了一个不可捕获的异常
  • .NET 动态调用WebService + WSE + UsernameToken
  • .NET/ASP.NETMVC 深入剖析 Model元数据、HtmlHelper、自定义模板、模板的装饰者模式(二)...
  • .Net环境下的缓存技术介绍