当前位置:   article > 正文

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

opencv puttext 字加黑边

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

作者:Xiou

1.文字绘制

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

函数声明如下:

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

其中,参数
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()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

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

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

2.边界填充

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

该函数声明如下:

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

其中,参数
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()

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

输出结果:

在这里插入图片描述

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()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

输出结果:

在这里插入图片描述

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()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

输出结果:

在这里插入图片描述

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()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

输出结果:

在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/370275
推荐阅读
相关标签
  

闽ICP备14008679号