OpenCV Python如何为图像添加边框?
在图像处理中,经常需要添加边框来突出显示图像或者为图像留出空间供其他操作。本文将介绍如何使用OpenCV Python为图像添加边框。
方法一:使用cv2.copyMakeBorder函数
cv2.copyMakeBorder函数可以为图像添加任意宽度的边框,可以通过指定边框类型来控制边框的样式。
下面是一个简单的例子,演示如何为图像添加2个像素宽度的白色边框:
import cv2
# 读取图像
img = cv2.imread('example.jpg')
# 为图像添加2个像素宽度的白色边框
border_img = cv2.copyMakeBorder(img, 2, 2, 2, 2, cv2.BORDER_CONSTANT, value=[255, 255, 255])
# 显示原图和添加边框后的图像
cv2.imshow('original', img)
cv2.imshow('border', border_img)
cv2.waitKey()
在上面的代码中,cv2.copyMakeBorder函数的第一个参数是输入图像,第二个参数和第三个参数是上边框和下边框的宽度,第四个参数和第五个参数是左边框和右边框的宽度,第六个参数cv2.BORDER_CONSTANT指定使用常数填充边界,第七个参数value指定边界的颜色值。
如果要添加不同样式的边框,只需要改变第六个参数就可以了。例如,下面的代码演示了如何添加黑色边框:
import cv2
# 读取图像
img = cv2.imread('example.jpg')
# 为图像添加2个像素宽度的黑色边框,边框样式采用cv2.BORDER_REPLICATE
border_img = cv2.copyMakeBorder(img, 2, 2, 2, 2, cv2.BORDER_REPLICATE)
# 显示原图和添加边框后的图像
cv2.imshow('original', img)
cv2.imshow('border', border_img)
cv2.waitKey()
方法二:使用numpy.pad函数
numpy.pad函数也可以用来添加边框,使用方法比cv2.copyMakeBorder函数略有不同。
下面是一个例子,演示如何为图像添加2个像素宽度的白色边框:
import cv2
import numpy as np
# 读取图像
img = cv2.imread('example.jpg')
# 为图像添加2个像素宽度的白色边框
border_img = np.pad(img, ( (2, 2), (2, 2), (0, 0) ), mode='constant', constant_values=255)
# 显示原图和添加边框后的图像
cv2.imshow('original', img)
cv2.imshow('border', border_img)
cv2.waitKey()
在上面的代码中,np.pad函数的第一个参数是输入的数组,第二个参数是边框宽度,每一个元素是一个元组,其中第一个元素是上边框或左边框的宽度,第二个元素是下边框或右边框的宽度。第三个参数是边框填充的模式,这里我们使用常数填充,所以指定mode=’constant’,第四个参数是填充边框使用的常数值,这里我们使用白色,所以指定constant_values=255。
方法三:使用numpy.vstack和numpy.hstack函数
numpy.vstack和numpy.hstack函数可以用来将几个图像组合在一起,从而形成一个新的图像。如果我们将原图像上下左右各添加一个像素,然后再将这几个图像组合在一起,就可以得到具有边框的新图像。
下面是一个例子,演示如何为图像添加1个像素宽度的黑色边框:
import cv2
import numpy as np
# 读取图像
img = cv2.imread('example.jpg')
# 在上下左右各添加1个像素宽度的黑色边框
h_border = np.zeros((img.shape[0]+2, 1, 3), dtype=np.uint8)
v_border = np.zeros((1, img.shape[1]+2, 3), dtype=np.uint8)
h_border.fill(0)
v_border.fill(0)
img_with_border = np.vstack([h_border, np.hstack([v_border, img, v_border]), h_border])
# 显示原图和添加边框后的图像
cv2.imshow('original', img)
cv2.imshow('border', img_with_border)
cv2.waitKey()
在上面的代码中,我们先初始化了一个宽度为1,颜色为黑色的边框。然后,使用numpy.hstack函数将左边框、原图像和右边框组合在一起,使用numpy.vstack函数将上边框、中间的图片和下边框组合在一起,最终得到一个具有边框的新图像。
结论
本文介绍了3种方法来为图像添加边框:cv2.copyMakeBorder函数、numpy.pad函数和numpy.vstack和numpy.hstack函数。根据具体情况选择合适的方法来添加边框即可。