【OpenCV】图像上绘制文字cv2.putText()函数用法,添加倾斜透明水印

这篇具有很好参考价值的文章主要介绍了【OpenCV】图像上绘制文字cv2.putText()函数用法,添加倾斜透明水印。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

【OpenCV】图像上绘制文字cv2.putText()函数用法,添加倾斜透明水印,OpenCV,opencv,人工智能,计算机视觉,python,图像处理

1. 概述


在OpenCV中,调用cv2.putText()函数可添加文字到指定位置,对于需要在图片中加入文字的场景提供了一种比较直接方便的方式。

注意:OpenCV 不支持显示中文字符,使用 cv2.putText() 时添加的文本字符串不能包含中文字符(包括中文标点符号)

2. cv2.putText()函数参数

其函数原型如下所示:

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

上述参数分别表示:

  • img:需要绘制文本的图像;

  • text:要绘制的文本内容;

  • org:表示要绘制的位置,图像中文本字符串的左下角;可以用一个元祖来表示x、y坐标,例如(10, 100)表示x=10,y=100。

  • fontFace:字体类型,如cv2.FONT_HERSHEY_SIMPLEX、cv2.FONT_HERSHEY_PLAIN等;对应的字体类型如下:

     cv2.FONT_ITALIC:斜体字的标志
     cv2.FONT_HERSHEY_PLAIN:小尺寸无衬线字体
     cv2.FONT_HERSHEY_SIMPLEX:正常大小的无衬线字体
     cv2.FONT_HERSHEY_DUPLEX:正常大小的无衬线字体(比FONT_HERSHEY_SIMPLEX更复杂)
     cv2.FONT_HERSHEY_COMPLEX:正常大小的衬线字体
     cv2.FONT_HERSHEY_TRIPLEX:正常大小的衬线字体(比FONT_HERSHEY_COMPLEX更复杂)
     cv2.FONT_HERSHEY_SCRIPT_SIMPLEX:手写体字体
     cv2.FONT_HERSHEY_SCRIPT_COMPLEX(比FONT_HERSHEY_SCRIPT_SIMPLEX的更复杂)
    
  • fontScale:字体的大小,字体比例因子乘以font-specific基本大小;

  • color:文本字体颜色,设置三通道的元组BGR,比如(255,0,0)

    常见颜色:
    red (0, 0, 255)
    green (0, 128, 0)
    blue (255, 0, 0)
    yellow (0, 255, 255)
    purple (128, 0, 128)
    orange (0, 165, 255)
    white (255, 255, 255)
    black (0, 0, 0)
    gray (128, 128, 128)

  • thickness:字体粗细,默认为1;

  • lineType:线条类型,默认为cv2.LINE_AA;

  • bottomLeftOrigin:坐标原点,如果为真,则图像数据原点位于左下角,否则它在左上角;
    其中,org定义了文本起始位置,可以用一个元祖来表示x、y坐标,例如(10, 100)表示x=10,y=100。

3. 图像上绘制非中文文字

import cv2

img = cv2.imread('test.png')  # 读取彩色图像(BGR)
cv2.putText(img, '@Elaine', (300, 40), cv2.FONT_HERSHEY_COMPLEX, 1, (128, 128, 128), 2, cv2.LINE_AA)
cv2.imshow('test', img)  # 显示叠加图像
cv2.waitKey()  # 等待按键命令

效果展示:
【OpenCV】图像上绘制文字cv2.putText()函数用法,添加倾斜透明水印,OpenCV,opencv,人工智能,计算机视觉,python,图像处理

4. 图像上绘制中文文字

(1) 如果不做处理,直接使用cv2.putText()展示,中文会变成?,OpenCV 不支持显示中文字符。

import cv2

img = cv2.imread('test.png')  # 读取彩色图像(BGR)
cv2.putText(img, '@Elaine猿', (300, 40), cv2.FONT_HERSHEY_COMPLEX, 1, (128, 128, 128), 2, cv2.LINE_AA)
cv2.imshow('test', img)  # 显示叠加图像
cv2.waitKey()  # 等待按键命令

效果展示:
【OpenCV】图像上绘制文字cv2.putText()函数用法,添加倾斜透明水印,OpenCV,opencv,人工智能,计算机视觉,python,图像处理

(2) 在图像中添加中文字符,可以使用 opencv+PIL 实现

注意Image.fromarray()与np.array()之间的相互转化
参考链接:https://blog.csdn.net/qq_41273999/article/details/134569426?spm=1001.2014.3001.5501

import cv2
from PIL import Image, ImageDraw, ImageFont
import numpy as np

img = cv2.imread('test.png')  # 读取彩色图像(BGR)
imgPIL = Image.fromarray(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
# cv2.putText(img, '@Elaine猿', (300, 40), cv2.FONT_HERSHEY_COMPLEX, 1, (128, 128, 128), 2, cv2.LINE_AA)

drawPIL = ImageDraw.Draw(imgPIL)
textSize = 35
fontText = ImageFont.truetype("font/simsun.ttc", textSize, encoding="utf-8")
pos = (300, 40)  # (left, top),字符串左上角坐标
text = '@Elaine猿'
color = (128, 128, 128)  # gray
drawPIL.text(pos, text, color, font=fontText)

imgPutText = cv2.cvtColor(np.asarray(imgPIL), cv2.COLOR_RGB2BGR)
cv2.imshow('test', imgPutText)  # 显示叠加图像
cv2.waitKey()  # 等待按键命令

效果展示:
【OpenCV】图像上绘制文字cv2.putText()函数用法,添加倾斜透明水印,OpenCV,opencv,人工智能,计算机视觉,python,图像处理

5. 图片上添加倾斜透明文字水印

方法1:

import numpy as np
from PIL import Image, ImageDraw, ImageFont
import cv2

# 读取彩色图像(BGR)
img = cv2.imread('test.png')
imgPIL = Image.fromarray(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))

# 图片的颜色模式设置为RGBA
img_RGBA = imgPIL.convert('RGBA')

# 新建一个和原图大小一样的水印覆盖层
text_overlay = Image.new('RGBA', img_RGBA.size, (255, 255, 255, 0))

# 创建一个画图对象
drawPIL = ImageDraw.Draw(text_overlay)

# 设置字体大小
textSize = 35
fontText = ImageFont.truetype("font/simsun.ttc", textSize, encoding="utf-8")

# 在指定位置画上文字水印
box = drawPIL.textbbox((0, 0), '@Elaine猿', font=fontText)
text_width, text_height = box[2], box[3]
x = img_RGBA.width / 2 - text_width / 2
y = img_RGBA.height / 2 - text_height / 2

# fill参数的(128, 128, 128)为颜色gray, 最后一位为透明度
drawPIL.text((x, y), '@Elaine猿', font=fontText, fill=(128, 128, 128, 160))

# 设置文本旋转角度
angle = 20
# 中心点
center = (img_RGBA.width / 2, img_RGBA.height / 2)
M = cv2.getRotationMatrix2D(center, angle, 1.0)
text_overlay = cv2.warpAffine(np.array(text_overlay), M, (img_RGBA.width, img_RGBA.height), flags=cv2.INTER_CUBIC,
                              borderMode=cv2.BORDER_REPLICATE)
text_overlay = Image.fromarray(text_overlay)

# 合成透明图像和背景不透明图像
img_RGBA = Image.alpha_composite(img_RGBA, text_overlay)
img_RGB = img_RGBA.convert('RGB')

imgPutText = cv2.cvtColor(np.asarray(img_RGB), cv2.COLOR_RGB2BGR)
cv2.imshow('test', imgPutText)  # 显示叠加图像
cv2.waitKey()  # 等待按键命令

效果展示:
【OpenCV】图像上绘制文字cv2.putText()函数用法,添加倾斜透明水印,OpenCV,opencv,人工智能,计算机视觉,python,图像处理


方法二:

import numpy as np
from PIL import Image, ImageDraw, ImageFont
import cv2

# 打开图片Image格式
img = Image.open('test.png')

# 图片的颜色模式设置为RGBA
img_RGBA = img.convert('RGBA')

# 新建一个和原图大小一样的水印覆盖层
text_overlay = Image.new('RGBA', img_RGBA.size, (255, 255, 255, 0))

# 创建一个画图对象
image_draw = ImageDraw.Draw(text_overlay)
# 设置字体大小
text_size = 20
font = ImageFont.truetype("font/simsun.ttc", text_size, encoding="utf-8")

# 在指定位置画上文字水印
text = '@Elaine猿'
box = image_draw.textbbox((0, 0), text, font=font)
text_width, text_height = box[2], box[3]
x = img_RGBA.width / 2 - text_width / 2
y = img_RGBA.height / 2 - text_height / 2
# fill参数的(128, 128, 128)为颜色gray, 最后一位为透明度
image_draw.text((x, y), text, font=font, fill=(128, 128, 128, 800))

# 设置文本旋转角度
angle = 30
# 中心点
center = (img_RGBA.width / 2, img_RGBA.height / 2)
M = cv2.getRotationMatrix2D(center, angle, 1.0)
text_overlay = cv2.warpAffine(np.array(text_overlay), M, (img_RGBA.width, img_RGBA.height), flags=cv2.INTER_CUBIC,
                              borderMode=cv2.BORDER_REPLICATE)
text_overlay = Image.fromarray(text_overlay)

# 合成透明图像和背景不透明图像
img_RGBA = Image.alpha_composite(img_RGBA, text_overlay)
img_RGB = img_RGBA.convert('RGB')
img_RGB.show()

【OpenCV】图像上绘制文字cv2.putText()函数用法,添加倾斜透明水印,OpenCV,opencv,人工智能,计算机视觉,python,图像处理文章来源地址https://www.toymoban.com/news/detail-758631.html

到了这里,关于【OpenCV】图像上绘制文字cv2.putText()函数用法,添加倾斜透明水印的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • opencv基础48-绘制图像轮廓并切割示例-cv2.drawContours()

    在 OpenCV 中,可以使用函数 cv2.drawContours()绘制图像轮廓。该函数的语法格式是: image=cv2.drawContours( image, contours, contourIdx, color[, thickness[, lineType[, hierarchy[, maxLevel[, offset]]]]] ) 其中,函数的返回值为 image,表示目标图像,即绘制了边缘的原始图像。 该函数有如下参数: image:待

    2024年02月13日
    浏览(27)
  • opencv-19 图像色彩空间转换函数cv2.cvtColor()

    cv2.cvtColor() 函数是 OpenCV 中用于图像颜色空间转换的函数。它允许你将图像从一个色彩空间转换为另一个色彩空间。在 Python 中,你可以使用这个函数来实现不同色彩空间之间的转换。 函数的基本语法为: 参数说明: src:输入图像,可以是 NumPy 数组或 OpenCV 中的 Mat 对象。

    2024年02月15日
    浏览(34)
  • 使用OpenCV的cv2.imread函数读取图像介绍

    在计算机视觉和图像处理应用中,读取图像是一个常见的操作。OpenCV是一个广泛使用的图像处理库,它提供了 cv2.imread 函数,用于读取图像。本文将详细介绍如何使用 cv2.imread 函数,包括参数和用法。 首先,确保你已经安装了OpenCV库。你可以使用以下命令来安装OpenCV(如果尚

    2024年02月05日
    浏览(33)
  • 【Python/Opencv】图像权重加法函数:cv2.addWeighted()详解

    在OpenCV图像加法cv2.add函数详解详细介绍了图像的加法运算。 除了这种加法外,OpenCV还提供了带权重的加法,即两副图像的像素通道值相加时各自按一定的权重比例取值来相加。 假设有2个图像矩阵src1和src2,在两个图像融合时,各自的权重分别为alpha和beta,则二者融合后的目

    2024年02月15日
    浏览(46)
  • opencv-26 图像几何变换04- 重映射-函数 cv2.remap()

    重映射(Remapping)是图像处理中的一种操作,用于将图像中的像素从一个位置映射到另一个位置。重映射可以实现图像的平移、旋转、缩放和透视变换等效果。它是一种基于像素级的图像变换技术,可以通过定义映射关系来改变图像的几何形状和外观。 在重映射中,我们需要

    2024年02月15日
    浏览(27)
  • 关于opencv中cv2.imread函数读取的图像shape问题

    图像坐标系是(w,h),w为x轴,h为y轴,(x,y) 但opencv读出来的数组却正好相反,是(h,w,3),(y,x,3) 所以这里会有一个转换 实则转换为图像坐标系时,要转置一下,或者image.shape[::-1] 切片操作 [start,endstep],其中:- start: 表示开始的下标,如果省略默认为 0 - end: 表示结束的下标(不包含

    2024年02月12日
    浏览(30)
  • 详解cv2.addWeighted函数【使用 OpenCV 添加(混合)两个图像-Python版本】

    有的时候我们需要将两张图片在alpha通道进行混合,比如深度学习数据集增强方式MixUp。OpenCV的 addWeighted 提供了相关操作,此篇博客将详细介绍这个函数,并给出代码示例。🚀🚀 o u t p u t I m g = s a t u r a t e ( α ∗ i n p u t I m g 1 + β ∗ i n p u t I m g 2 + γ ) rm outputImg=saturate( al

    2024年02月06日
    浏览(44)
  • opencv 基础50-图像轮廓学习03-Hu矩函数介绍及示例-cv2.HuMoments()

    Hu 矩(Hu Moments)是由计算机视觉领域的科学家Ming-Kuei Hu于1962年提出的一种图像特征描述方法。这些矩是用于描述图像形状和几何特征的不变特征,具有平移、旋转和尺度不变性,适用于图像识别、匹配和形状分析等任务。 Ming-Kuei Hu在其论文中提出了七个用于形状描述的独特

    2024年02月13日
    浏览(34)
  • OpenCV笔记:模板匹配 cv2.matchTemplate()、cv2.minMaxLoc() 与 绘制矩形 cv2.rectangle() 方法介绍

            模板匹配是用来在一副大图中搜寻查找模版图像位置的方法。绘制矩形是用来将模版图像的匹配结果展示出来的方法。         模板匹配实现简单(2~3行代码),计算效率高,不需要执行阈值化、边缘检测等操作来生成二值化图像。 但是: 如果输入图像中存

    2024年02月04日
    浏览(29)
  • OpenCV中cv2的常见用法

    使用函数cv2.imread(filepath,flags)读入一副图片 filepath:要读入图片的完整路径 flags:读入图片的标志 cv2.IMREAD_COLOR:默认参数,读入一副彩色图片,忽略alpha通道 cv2.IMREAD_GRAYSCALE:读入灰度图片 cv2.IMREAD_UNCHANGED:顾名思义,读入完整图片,包括alpha通道 使用函数cv2.imshow(wname,img)显

    2024年02月10日
    浏览(27)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包