how to add border around an image in opencv python

后端 未结 4 2105
清歌不尽
清歌不尽 2020-12-09 15:06

If I have an image like below, how can I add border all around the image such that the overall height and width of the final image increases but the height and width of the

4条回答
  •  温柔的废话
    2020-12-09 15:23

    The following code adds a constant border of size 10 pixels to all four sides of your original image.

    For the colour, I have assumed that you want to use the average gray value of the background, which I have calculated from the mean value of bottom two lines of your image. Sorry, somewhat hard coded, but shows the general how-to and can be adapted to your needs.

    If you leave bordersize values for bottom and right at 0, you even get a symmetric border.

    Other values for BORDER_TYPE are possible, such as BORDER_DEFAULT, BORDER_REPLICATE, BORDER_WRAP.

    For more details 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()
    

提交回复
热议问题