如何在 opencv 中为图像添加边框 python
how to add border around an image in opencv python
如果我有如下图片,如何在图片周围添加边框,使最终图片的整体高度和宽度增加,但原始图片的高度和宽度保持原样在中间.
以下代码将大小为 10 像素的恒定边框添加到原始图像的所有四个边。
对于颜色,我假设您想使用背景的平均灰度值,这是我根据图像底部两行的平均值计算得出的。抱歉,有些硬编码,但显示了一般操作方法并且可以根据您的需要进行调整。
如果将 bottom 和 right 的 bordersize 值保留为 0,您甚至可以获得对称边框。
BORDER_TYPE 的其他值也是可能的,例如 BORDER_DEFAULT、BORDER_REPLICATE、BORDER_WRAP。
更多详情请参考:http://docs.opencv.org/trunk/d3/df2/tutorial_py_basic_ops.html#gsc.tab=0
import numpy as np
import cv2
im = cv2.imread('image.jpg')
row, col = im.shape[:2]
bottom = im[row-2:row, 0:col]
mean = cv2.mean(bottom)[0]
bordersize = 10
border = cv2.copyMakeBorder(
im,
top=bordersize,
bottom=bordersize,
left=bordersize,
right=bordersize,
borderType=cv2.BORDER_CONSTANT,
value=[mean, mean, mean]
)
cv2.imshow('image', im)
cv2.imshow('bottom', bottom)
cv2.imshow('border', border)
cv2.waitKey(0)
cv2.destroyAllWindows()
试试这个:
import cv2
import numpy as np
img=cv2.imread("img_src.jpg")
h,w=img.shape[0:2]
base_size=h+20,w+20,3
# make a 3 channel image for base which is slightly larger than target img
base=np.zeros(base_size,dtype=np.uint8)
cv2.rectangle(base,(0,0),(w+20,h+20),(255,255,255),30) # really thick white rectangle
base[10:h+10,10:w+10]=img # this works
一行回答
outputImage = cv2.copyMakeBorder(
inputImage,
topBorderWidth,
bottomBorderWidth,
leftBorderWidth,
rightBorderWidth,
cv2.BORDER_CONSTANT,
value=color of border
)
使用 openCV 添加边框
import cv2
white = [255,255,255]
img1 = cv2.imread('input.png')
constant= cv2.copyMakeBorder(img1,20,20,20,20,cv2.BORDER_CONSTANT,value=white)
cv2.imwrite('output.png',constant)
如果我有如下图片,如何在图片周围添加边框,使最终图片的整体高度和宽度增加,但原始图片的高度和宽度保持原样在中间.
以下代码将大小为 10 像素的恒定边框添加到原始图像的所有四个边。
对于颜色,我假设您想使用背景的平均灰度值,这是我根据图像底部两行的平均值计算得出的。抱歉,有些硬编码,但显示了一般操作方法并且可以根据您的需要进行调整。
如果将 bottom 和 right 的 bordersize 值保留为 0,您甚至可以获得对称边框。
BORDER_TYPE 的其他值也是可能的,例如 BORDER_DEFAULT、BORDER_REPLICATE、BORDER_WRAP。
更多详情请参考:http://docs.opencv.org/trunk/d3/df2/tutorial_py_basic_ops.html#gsc.tab=0
import numpy as np
import cv2
im = cv2.imread('image.jpg')
row, col = im.shape[:2]
bottom = im[row-2:row, 0:col]
mean = cv2.mean(bottom)[0]
bordersize = 10
border = cv2.copyMakeBorder(
im,
top=bordersize,
bottom=bordersize,
left=bordersize,
right=bordersize,
borderType=cv2.BORDER_CONSTANT,
value=[mean, mean, mean]
)
cv2.imshow('image', im)
cv2.imshow('bottom', bottom)
cv2.imshow('border', border)
cv2.waitKey(0)
cv2.destroyAllWindows()
试试这个:
import cv2
import numpy as np
img=cv2.imread("img_src.jpg")
h,w=img.shape[0:2]
base_size=h+20,w+20,3
# make a 3 channel image for base which is slightly larger than target img
base=np.zeros(base_size,dtype=np.uint8)
cv2.rectangle(base,(0,0),(w+20,h+20),(255,255,255),30) # really thick white rectangle
base[10:h+10,10:w+10]=img # this works
一行回答
outputImage = cv2.copyMakeBorder(
inputImage,
topBorderWidth,
bottomBorderWidth,
leftBorderWidth,
rightBorderWidth,
cv2.BORDER_CONSTANT,
value=color of border
)
使用 openCV 添加边框
import cv2
white = [255,255,255]
img1 = cv2.imread('input.png')
constant= cv2.copyMakeBorder(img1,20,20,20,20,cv2.BORDER_CONSTANT,value=white)
cv2.imwrite('output.png',constant)