Как добавить границу вокруг изображения в opencv python - программирование
Подтвердить что ты не робот

Как добавить границу вокруг изображения в opencv python

Если у меня есть изображение, как показано ниже, как можно добавить границу вокруг изображения таким образом, чтобы общая высота и ширина конечного изображения увеличивались, но высота и ширина исходного изображения остается как-находится посередине.

введите описание изображения здесь

4b9b3361

Ответ 1

Следующий код добавляет постоянную границу размером 10 пикселей на все четыре стороны исходного изображения.

Для цвета я предположил, что вы хотите использовать среднее значение серого фона, которое я вычислил из среднего значения нижних двух строк вашего изображения. Извините, несколько жестко закодирован, но показывает общее руководство и может быть адаптирован к вашим потребностям.

Если вы оставляете граничные значения для нижнего и правого в 0, вы даже получаете симметричную границу.

Возможны другие значения для BORDER_TYPE, такие как BORDER_DEFAULT, BORDER_REPLICATE, BORDER_WRAP.

Для получения дополнительной информации cf: 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()

Ответ 2

Попробуй это:

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

Ответ 3

Ответ в одной строке

outputImage = cv2.copyMakeBorder(
                 inputImage, 
                 topBorderWidth, 
                 bottomBorderWidth, 
                 leftBorderWidth, 
                 rightBorderWidth, 
                 cv2.BORDER_CONSTANT, 
                 value=color of border
              )