Python学习笔记第七十七天(OpenCV绘画功能)

2023-12-17 01:04

本文主要是介绍Python学习笔记第七十七天(OpenCV绘画功能),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Python学习笔记第七十七天

  • OpenCV绘画功能
    • 画线
    • 画矩形
    • 画圆
    • 画椭圆
    • 画多边形
    • 向图像添加文本
    • 向图像添加对角线
  • 后记

OpenCV绘画功能

画线

在OpenCV中,我们可以使用cv2.line()函数来绘制一条线。该函数接受以下参数:

  • img:要在其上绘制线条的图像。
  • pt1:线条的起始点坐标。
  • pt2:线条的结束点坐标。
  • color:线条的颜色。对于彩色图像,可以使用BGR格式表示颜色,例如(255, 0, 0)表示蓝色。
  • thickness:线条的粗细。
  • lineType:线条的类型。对于8位图像,使用8,对于16位图像,使用16。
  • shift:线条的精度。

下面是一个简单的例子,演示如何在图像上绘制一条蓝色的线:

import cv2
import numpy as np# 创建一个空白图像
img = np.zeros((512, 512, 3), dtype="uint8")# 绘制一条蓝色的线
cv2.line(img, (0, 0), (511, 511), (255, 0, 0), 5)# 显示图像
cv2.imshow("Line", img)
cv2.waitKey(0)
cv2.destroyAllWindows()

画矩形

在OpenCV中,我们可以使用cv2.rectangle()函数来绘制矩形。该函数接受以下参数:

  • img:要在其上绘制矩形的图像。
  • pt1:矩形的左上角坐标。
  • pt2:矩形的右下角坐标。
  • color:矩形的颜色。对于彩色图像,可以使用BGR格式表示颜色。
  • thickness:矩形边框的粗细。如果thickness为负数(通常为-1),则绘制填充矩形。
  • lineType:线条的类型。对于8位图像,使用8,对于16位图像,使用16。
  • shift:线条的精度。

下面是一个简单的例子,演示如何在图像上绘制一个蓝色的矩形:

import cv2
import numpy as np# 创建一个空白图像
img = np.zeros((512, 512, 3), dtype="uint8")# 绘制一个蓝色的矩形
cv2.rectangle(img, (128, 128), (480, 480), (255, 0, 0), 3)# 显示图像
cv2.imshow("Rectangle", img)
cv2.waitKey(0)
cv2.destroyAllWindows()

画圆

在OpenCV中,我们可以使用cv2.circle()函数来绘制圆形。该函数接受以下参数:

  • img:要在其上绘制圆形的图像。
  • center:圆心的坐标。
  • radius:圆的半径。
  • color:圆形的颜色。对于彩色图像,可以使用BGR格式表示颜色。
  • thickness:圆的边框粗细。如果thickness为负数(通常为-1),则绘制填充圆形。
  • lineType:线条的类型。对于8位图像,使用8,对于16位图像,使用16。
  • shift:线条的精度。

下面是一个简单的例子,演示如何在图像上绘制一个蓝色的圆形:

import cv2
import numpy as np# 创建一个空白图像
img = np.zeros((512, 512, 3), dtype="uint8")# 绘制一个蓝色的圆形
cv2.circle(img, (256, 256), 100, (255, 0, 0), 3)# 显示图像
cv2.imshow("Circle", img)
cv2.waitKey(0)
cv2.destroyAllWindows()

画椭圆

在OpenCV中,我们可以使用cv2.ellipse()函数来绘制椭圆。该函数接受以下参数:

  • img:要在其上绘制椭圆的图像。
  • center:椭圆中心的坐标。
  • axes:椭圆的长轴和短轴。
  • angle:椭圆的旋转角度。
  • startAngle:起始角度。
  • endAngle:结束角度。
  • color:椭圆的颜色。对于彩色图像,可以使用BGR格式表示颜色。
  • thickness:椭圆边框的粗细。如果thickness为负数(通常为-1),则绘制填充椭圆。
  • lineType:线条的类型。对于8位图像,使用8,对于16位图像,使用16。
  • shift:线条的精度。

下面是一个简单的例子,演示如何在图像上绘制一个蓝色的椭圆:

import cv2
import numpy as np# 创建一个空白图像
img = np.zeros((512, 512, 3), dtype="uint8")# 绘制一个蓝色的椭圆
cv2.ellipse(img, (256, 256), (100, 50), 0, 0, 180, (255, 0, 0), 3)# 显示图像
cv2.imshow("Ellipse", img)
cv2.waitKey(0)
cv2.destroyAllWindows()

画多边形

在OpenCV中,我们可以使用cv2.polylines()函数来绘制多边形。该函数接受以下参数:

  • img:要在其上绘制多边形的图像。
  • points:多边形的顶点坐标列表。每个顶点都是一个(x, y)坐标对。
  • isClosed:是否闭合多边形。如果为True,则多边形闭合;如果为False,则不闭合。
  • color:多边形的颜色。对于彩色图像,可以使用BGR格式表示颜色。
  • thickness:多边形边框的粗细。如果thickness为负数(通常为-1),则绘制填充多边形。
  • lineType:线条的类型。对于8位图像,使用8,对于16位图像,使用16。
  • shift:线条的精度。

下面是一个简单的例子,演示如何在图像上绘制一个蓝色的三角形:

import cv2
import numpy as np# 创建一个空白图像
img = np.zeros((512, 512, 3), dtype="uint8")# 绘制一个蓝色的三角形
points = np.array([[100, 100], [200, 100], [150, 200]], dtype="int32")
cv2.polylines(img, [points], True, (255, 0, 0), 3)# 显示图像
cv2.imshow("Polygon", img)
cv2.waitKey(0)
cv2.destroyAllWindows()

向图像添加文本

在OpenCV中,我们可以使用cv2.putText()函数向图像添加文本。该函数接受以下参数:

  1. img:要在其上添加文本的图像。
  2. text:要添加的文本内容。
  3. org:文本字符串的左上角坐标(即基线坐标)。它是一个包含两个元素(x坐标和y坐标)的元组,例如(x, y)。
  4. fontFace:字体类型。OpenCV支持多种字体类型,包括HersheySimplex、HersheyComplex等。
  5. fontScale:字体大小。这是一个缩放因子,表示字体的宽度和高度与默认大小的比例。默认情况下,字体大小为1.0。
  6. thickness:可选参数,用于指定文本线条的粗细。如果thickness为负数(通常为-1),则绘制填充文本。
  7. lineType:线条的类型。对于8位图像,使用8,对于16位图像,使用16。
  8. bottomLeftOrigin:布尔值,当它为True时,图像数据原点位于左下角。默认值为False。

在使用cv2.putText()函数时,需要确保图像是可写的,并且图像的数据类型和范围适合文本的绘制。此外,还需要根据具体的字体类型和字体大小选择合适的参数值。

以下是一个使用cv2.putText()函数向图像添加文本的简单示例:

import cv2
import numpy as np# 创建一个空白图像
img = np.zeros((512, 512, 3), dtype="uint8")# 在图像上添加蓝色的文本
cv2.putText(img, "Hello World", (100, 100), cv2.FONT_HERSHEY_SIMPLEX, 1.0, (255, 0, 0), 2)# 显示图像
cv2.imshow("Text", img)
cv2.waitKey(0)
cv2.destroyAllWindows()

向图像添加对角线

在OpenCV中,我们可以使用cv2.line()函数向图像添加对角线。该函数接受以下参数:

  • img:要在其上添加对角线的图像。
  • pt1:对角线的起点坐标。
  • pt2:对角线的终点坐标。
  • color:对角线的颜色。对于彩色图像,可以使用BGR格式表示颜色。
  • thickness:对角线线条的粗细。
  • lineType:线条的类型。对于8位图像,使用8,对于16位图像,使用16。
  • shift:线条的精度。

下面是一个简单的例子,演示如何在图像上添加一条蓝色的对角线:

import cv2
import numpy as np# 创建一个空白图像
img = np.zeros((512, 512, 3), dtype="uint8")# 添加一条蓝色的对角线
cv2.line(img, (0, 0), (511, 511), (255, 0, 0), 5)# 显示图像
cv2.imshow("Diagonal Line", img)
cv2.waitKey(0)
cv2.destroyAllWindows()

后记

今天学习的是Python OpenCV绘画功能学会了吗。 今天学习内容总结一下:

  1. 画线
  2. 画矩形
  3. 画圆
  4. 画椭圆
  5. 画多边形
  6. 向图像添加文本
  7. 向图像添加对角线

这篇关于Python学习笔记第七十七天(OpenCV绘画功能)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/502557

相关文章

使用Python的requests库调用API接口的详细步骤

《使用Python的requests库调用API接口的详细步骤》使用Python的requests库调用API接口是开发中最常用的方式之一,它简化了HTTP请求的处理流程,以下是详细步骤和实战示例,涵... 目录一、准备工作:安装 requests 库二、基本调用流程(以 RESTful API 为例)1.

Python清空Word段落样式的三种方法

《Python清空Word段落样式的三种方法》:本文主要介绍如何用python-docx库清空Word段落样式,提供三种方法:设置为Normal样式、清除直接格式、创建新Normal样式,注意需重... 目录方法一:直接设置段落样式为"Normal"方法二:清除所有直接格式设置方法三:创建新的Normal样

Python调用LibreOffice处理自动化文档的完整指南

《Python调用LibreOffice处理自动化文档的完整指南》在数字化转型的浪潮中,文档处理自动化已成为提升效率的关键,LibreOffice作为开源办公软件的佼佼者,其命令行功能结合Python... 目录引言一、环境搭建:三步构建自动化基石1. 安装LibreOffice与python2. 验证安装

把Python列表中的元素移动到开头的三种方法

《把Python列表中的元素移动到开头的三种方法》在Python编程中,我们经常需要对列表(list)进行操作,有时,我们希望将列表中的某个元素移动到最前面,使其成为第一项,本文给大家介绍了把Pyth... 目录一、查找删除插入法1. 找到元素的索引2. 移除元素3. 插入到列表开头二、使用列表切片(Lis

Python按照24个实用大方向精选的上千种工具库汇总整理

《Python按照24个实用大方向精选的上千种工具库汇总整理》本文整理了Python生态中近千个库,涵盖数据处理、图像处理、网络开发、Web框架、人工智能、科学计算、GUI工具、测试框架、环境管理等多... 目录1、数据处理文本处理特殊文本处理html/XML 解析文件处理配置文件处理文档相关日志管理日期和

Python标准库datetime模块日期和时间数据类型解读

《Python标准库datetime模块日期和时间数据类型解读》文章介绍Python中datetime模块的date、time、datetime类,用于处理日期、时间及日期时间结合体,通过属性获取时间... 目录Datetime常用类日期date类型使用时间 time 类型使用日期和时间的结合体–日期时间(

使用Python开发一个Ditto剪贴板数据导出工具

《使用Python开发一个Ditto剪贴板数据导出工具》在日常工作中,我们经常需要处理大量的剪贴板数据,下面将介绍如何使用Python的wxPython库开发一个图形化工具,实现从Ditto数据库中读... 目录前言运行结果项目需求分析技术选型核心功能实现1. Ditto数据库结构分析2. 数据库自动定位3

Python yield与yield from的简单使用方式

《Pythonyield与yieldfrom的简单使用方式》生成器通过yield定义,可在处理I/O时暂停执行并返回部分结果,待其他任务完成后继续,yieldfrom用于将一个生成器的值传递给另一... 目录python yield与yield from的使用代码结构总结Python yield与yield

python使用Akshare与Streamlit实现股票估值分析教程(图文代码)

《python使用Akshare与Streamlit实现股票估值分析教程(图文代码)》入职测试中的一道题,要求:从Akshare下载某一个股票近十年的财务报表包括,资产负债表,利润表,现金流量表,保存... 目录一、前言二、核心知识点梳理1、Akshare数据获取2、Pandas数据处理3、Matplotl

Django开发时如何避免频繁发送短信验证码(python图文代码)

《Django开发时如何避免频繁发送短信验证码(python图文代码)》Django开发时,为防止频繁发送验证码,后端需用Redis限制请求频率,结合管道技术提升效率,通过生产者消费者模式解耦业务逻辑... 目录避免频繁发送 验证码1. www.chinasem.cn避免频繁发送 验证码逻辑分析2. 避免频繁