【问题标题】:how to add border around an image in opencv python如何在opencv python中的图像周围添加边框
【发布时间】:2016-07-15 07:37:23
【问题描述】:

如果我有一个像下面这样的图像,如何在图像周围添加边框,以使最终图像的整体高度和宽度增加,但原始图像的高度和宽度保持在中间。

【问题讨论】:

  • cv2.copyMakeBorder 怎么样?
  • 顺便说一下,opencv官方文档提供了一个tutorial如何使用cv2.copyMakeBorder给am图片添加边框。

标签: python opencv computer-vision


【解决方案1】:

以下代码为原始图像的所有四个边添加一个大小为 10 像素的恒定边框。

对于颜色,我假设您要使用背景的平均灰度值,这是我根据图像底部两行的平均值计算得出的。抱歉,有些硬编码,但显示了一般操作方法,可以根据您的需要进行调整。

如果将底部和右侧的边框大小值保留为 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()

【讨论】:

  • 使用教程时,我认为红色(混淆地标记为蓝色)的值应该是 [255, 0, 0]。但实际上它是 [1.0, 0, 0] 以浮点数作为图像值颜色。
【解决方案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
                  )
    

    【讨论】:

      【解决方案4】:

      使用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)
      

      【讨论】:

        猜你喜欢
        • 2021-12-03
        • 2017-10-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-11-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多