how to add border around an image in opencv python

后端 未结 4 2101
清歌不尽
清歌不尽 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:22

    Answer in one line

    outputImage = cv2.copyMakeBorder(
                     inputImage, 
                     topBorderWidth, 
                     bottomBorderWidth, 
                     leftBorderWidth, 
                     rightBorderWidth, 
                     cv2.BORDER_CONSTANT, 
                     value=color of border
                  )
    
    0 讨论(0)
  • 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()
    
    0 讨论(0)
  • 2020-12-09 15:31

    Try This:

    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
    
    0 讨论(0)
  • 2020-12-09 15:37

    Add border using 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)
    
    0 讨论(0)
提交回复
热议问题