OpenCV入门(五)快速学会OpenCV4文字绘制边界填充

news2025/7/30 5:06:53

OpenCV入门(五)快速学会OpenCV4文字绘制&边界填充

1.文字绘制

OpenCV中除了提供绘制各种图形的函数外,还提供了一个特殊的绘制函数,即在图像上绘制文字。
这个函数是putText(),它是命名空间cv2中的函数,

函数声明如下:

    putText(img, text, org, fontFace, fontScale, color[, thickness[, lineType[,
bottomLeftOrigin]]])

其中,参数
img表示待绘制的图像;
text表示待绘制的文字;
org表示文本框的左下角;
fontFace表示字体;fontScale表示尺寸因子,值越大文字越大;
color表示字体的颜色(RGB);
thickness表示线条宽度;
lineType表示线型(4邻域或8邻域,默认8邻域);
bottomLeftOrigin如果为True,那么图像数据原点位于左下角,否则位于左上角。

绘制文字案例:

import cv2
import numpy as np
  
img = np.zeros([512, 512, 3], dtype=np.uint8)
for i in range(512):
    for j in range(512):
        img[i, j, :] = [i % 256, j % 256, (i + j) % 256]

info = 'Hello World'
font_face = cv2.FONT_HERSHEY_COMPLEX
font_scale = 2
thickness = 2
text_size = cv2.getTextSize(info, font_face, font_scale, thickness)
print(text_size)
p_center = (int(512 / 2 - text_size[0][0] / 2), int(512 / 2 - text_size[0][1] / 2))
cv2.putText(img, info, p_center, font_face, font_scale, (255,255,255), thickness)

cv2.imshow('res', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

首先通过两个for循环有规律地改变了像素值,这样可以模拟实现色彩渐变的效果。然后通过函数getTextSize得到要画文字的大小,这样可以计算出显示文字的位置。最后通过文本绘制函数putText画出一段字符串"Hello World"。

运行工程,结果如图所示:
在这里插入图片描述

2.边界填充

在OpenCV中,可以使用函数copyMakeBorder为图像设置边界。
该函数可以为图像定义额外的填充(边框),原始边缘的行或列被复制到额外的边框中。

该函数声明如下:

    cv.copyMakeBorder(src, top, bottom, left, right, borderType[, dst[, value]])

其中,参数
src表示输入图像,即原图像;
top、bottom、left、right分别表示在原图像的4个方向上扩充多少像素;
borderType表示边界类型,取值如下:
· BORDER_REPLICATE:复制法,复制最边缘像素,填充扩充的边界,。中值滤波就是采用的这种方法。
· BORDER_REFLECT_101:反射法,以最边缘像素为轴,对称填充,。这是高斯滤波边界处理的默认方法。
· BORDER_CONSTANT:常量法,以一个常量像素值(参数value)填充扩充的边界。这种方式在仿射变换、透视变换中非常常见。
· BORDER_REFLECT:和对称法原理一致,不过最边缘像素也要对称过去。
· BORDER_WRAP:用另一侧元素来填充这一侧的扩充边界。
参数value默认值为0,当borderType取值为BORDER_CONSTANT时,这个参数表示边界值。
dst表示输出图像,和原图像有一样的深度,大小为Size(src.cols + left +right, src.rows + top+ bottom)。

原图:

在这里插入图片描述

2.1 复制法


import cv2 as cv
img = cv.imread("test.jpg")

# 填充像素
top_size = 50
bottom_size = 50
left_size = 50
right_size = 50

# Replicate (复制法)
replicate = cv.copyMakeBorder(img, top_size, bottom_size, left_size, right_size, borderType=cv2.BORDER_REPLICATE)
cv.imshow("replicate", replicate)
cv.waitKey(0)
cv.destroyAllWindows()

输出结果:

在这里插入图片描述

2.2 反射法

代码实例:


import cv2 as cv
img = cv.imread("test.jpg")

# 填充像素
top_size = 50
bottom_size = 50
left_size = 50
right_size = 50

# Replicate (复制法)
replicate = cv.copyMakeBorder(img, top_size, bottom_size, left_size, right_size, borderType=cv.BORDER_REFLECT)
cv.imshow("replicate", replicate)
cv.waitKey(0)
cv.destroyAllWindows()

输出结果:

在这里插入图片描述

2.3 外包法

外包法: 用相反位置对图片进行包裹。

实例代码:


import cv2 as cv
img = cv.imread("test.jpg")

# 填充像素
top_size = 50
bottom_size = 50
left_size = 50
right_size = 50

# Replicate (复制法)
replicate = cv.copyMakeBorder(img, top_size, bottom_size, left_size, right_size, borderType=cv.BORDER_WRAP)
cv.imshow("replicate", replicate)
cv.waitKey(0)
cv.destroyAllWindows()

输出结果:

在这里插入图片描述

2.4 常量法

常量法: 用常数值填充. 需要设置一个 value 值,代表填充的颜色。

实例代码:


import cv2 as cv
img = cv.imread("test.jpg")

# 填充像素
top_size = 50
bottom_size = 50
left_size = 50
right_size = 50

# Replicate (复制法)
replicate = cv.copyMakeBorder(img, top_size, bottom_size, left_size, right_size, borderType=cv.BORDER_CONSTANT, value=0)
cv.imshow("replicate", replicate)
cv.waitKey(0)
cv.destroyAllWindows()

输出结果:

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/394553.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

(二十三)操作系统-多生产者·多消费者问题

文章目录一、问题描述二、问题分析1. 关系分析2. 整理思路三、实现1. 代码2.如果不要互斥信号量3. 将盘子(缓冲区)容量设为2四、总结一、问题描述 桌子上有一只盘子,每次只能向其中放入一个水果。爸爸专向盘子中放苹果,妈妈专向盘…

用强化学习神包trl轻松实现GPT2可控文本生成

来源:投稿 作者:Sally can wait 编辑:学姐 模型github: lvwerra/trl: Train transformer language models with reinforcement learning. (github.com)https://github.com/lvwerra/trl 这个项目是复现 ”Fine-Tuning Language Models from H…

C++vector 简单实现

一。概述 vector是我们经常用的一个容器,其本质是一个线性数组。通过对动态内存的管理,增删改查数据,达到方便使用的目的。 作为一个线性表,控制元素个数,容量,开始位置的指针分别是: start …

Hive---拉链表

拉链表 文章目录拉链表定义用途案例全量流程增量流程合并过程第一步第二步第三步案例二(含分区)创建外部表orders增量分区表历史记录表定义 拉链表是一种数据模型,主要是针对数据仓库设计中表存储数据的方式而定义的,顾名思义&am…

从零开始学GeoServer源码十一(如何处理多个文件解析器Multipart Resolver引起的冲突问题)

目录前言1.现象2.排查问题3.找到问题4.解决问题5.总结前言 本文起源于我们遇到的一个问题,本来 GeoServer 使用的好好的,但是有天突然发现,无法在 GeoServer 中上传样式的 sld 文件了,报错 “No Multipart-config for Servlet” …

java.lang.IllegalArgumentException: itemView may not be null

报错截图:场景介绍:在使用recycleView 自动递增数据,且自动滚动到最新行; 当数据达到273条 时出现ANR;项目中 全部的列表适配器使用的三方库:BaseRecyclerViewAdapterHelper (很早之前的项目&am…

《SQL基础》16. 锁

锁锁全局锁表级锁表锁元数据锁意向锁行级锁行锁间隙锁临键锁锁 锁是计算机协调多个进程或线程并发访问某一资源的机制。在数据库中,除传统的计算资源(CPU、RAM、I/O)的争用以外,数据也是一种供许多用户共享的资源。如何保证数据并…

uniapp在线升级关联云空间

升级中心 uni-upgrade-center - App: https://ext.dcloud.net.cn/plugin?id4542 App升级中心 uni-upgrade-center文档: https://uniapp.dcloud.net.cn/uniCloud/upgrade-center.html#uni-upgrade-center-app 升级中心 uni-upgrade-center - Admin&#…

Ka频段需要更多带宽?

随着全球连接需求的增长,许多卫星通信(satcom)系统日益采用Ka频段,对数据速率的要求也水涨船高。目前,高性能信号链已经能支持数千兆瞬时带宽,一个系统中可能有成百上千个收发器,超高吞吐量数据速率已经成为现实。 另…

JavaWeb—HTML

目录 1、B/S 软件的结构 2、前端的开发流程 3、网页的组成部分 4、HTML 简介 5、创建 HTML 文件 6、HTML 文件的书写规范 7、HTML 标签介绍 8、常用标签介绍 8.1、font 字体标签 8.2、特殊字符 8.3、标题标签 8.4、超链接 ( **** 重 点 ,必 …

如何实现jwt鉴权机制之详解

jwt鉴权一是什么headerpayloadSignature二、如何实现生成 token校验token三、优缺点优点:缺点:一是什么 JWT(JSON Web Token),本质就是一个字符串书写规范,如下图,作用是用来在用户和服务器之间…

Wannacrypt蠕虫老树开花?又见Wannacrypt

Wannacrypt蠕虫是一个在2017年就出现的远古毒株,其利用永恒之蓝漏洞降维打击用户服务器,而后进行扩散勒索,曾经一度风靡全球,可谓是闻者伤心,听着落泪,因为这玩意解密是不可能 解密的。 而2023年的今天&am…

MCM 箱模型建模方法及大气 O3 来源解析实用干货

OBM 箱模型可用于模拟光化学污染的发生、演变过程,研究臭氧的生成机制和进行敏感性分析,探讨前体物的排放对光化学污染的影响。箱模型通常由化学机理、物理过程、初始条件、输入和输出模块构成,化学机理是其核心部分。MCM (Master Chemical M…

【每天学习一点新知识】JNDI注入

什么是JNDIJNDI是Java的一种API,为我们提供了查找和访问各种命名和目录服务的通用统一的接口。通过JNDI统一接口我们可以来访问各种不同类型的服务,例如远程方法调用(RMI),通用对象请求代理体系结构(CORBA&…

Qt QTreeView简单使用

QT-QTreeView使用方法 QTreeView: 用于显示树状结构数据,适用于树状结构数据的操作。 一、初始化 ​ 利用QStandardlternModel来初始化数据,标准的基于项数据的数据模型类, 每个项数据可以是任何数据类型。 // 初始化model QStandardItem…

工作实战之拦截器模式

目录 前言 一、结构中包含的角色 二、拦截器使用 1.拦截器角色 a.自定义拦截器UserValidateInterceptor,UserUpdateInterceptor,UserEditNameInterceptor b.拦截器配置者UserInterceptorChainConfigure,任意组装拦截器顺序 c.拦截器管理者…

VM安装FydeOS16.0

准备工作 1、已安装VMware Workstation虚拟机; 2、下载好系统文件; 3、打开VM、新建虚拟机; 一、下载 https://fydeos.com/download/vm 我选择的镜像1。等下载完成,我这感觉下载速度不快,通过onedrive下载要快。 …

Jfrog 搭建本地maven仓库以及上传Android库

Jfrog 下载 安装包下载地址:Download Artifactory OSS | JFrog 如果是想下载之前的版本,可以点击上面的Get code source ,如果是最新版本,直接点下面的下载就好。下面以Linux安装为例。 Jfrog安装 对于Linux而言,其实…

Java泛型深入

一. 泛型的概述和优势 泛型概述 泛型&#xff1a;是JDK5中引入的特性&#xff0c;可以在编译阶段约束操作的数据类型&#xff0c;并进行检查。泛型的格式&#xff1a;<数据类型>&#xff0c;注意&#xff1a;泛型只能支持引用数据类型。集合体系的全部接口和实现类都是…

Java刷题-----蓝桥杯省赛JavaC组第十二届(第二场)4-------------6

4、格点题目本题总分&#xff1a;10 分问题描述如果一个点 ( x , y ) 的两维坐标都是整数&#xff0c;即 x ∈ Z 且 y ∈ Z &#xff0c;则称这个点为一个格点。如果一个点 ( x , y ) 的两维坐标都是正数&#xff0c;即 x > 0 且 y > 0 &#xff0c;则称这个点在第一象限…