次のコードは、元の画像の4辺すべてにサイズ10ピクセルの一定の境界線を追加します。
色については、画像の下部2行の平均値から計算した背景の平均グレー値を使用すると仮定しました。申し訳ありませんが、多少ハードコーディングされていますが、一般的なハウツーを示しており、ニーズに合わせて調整できます。
下部と右側のbordersize値を0のままにすると、対称的な境界線が得られます。
BORDER_DEFAULT、BORDER_REPLICATE、BORDER_WRAPなど、BORDER_TYPEには他の値も使用できます。
詳細については、cf: http://docs.opencv.org/trunk/d3/df2/tutorial_py_basic_ops.html#gsc.tab=
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
)