我们有时候使用Opencv截取一些图片的的时候,会选取到图片以外的区域,如何填充这种区域貌似没法直接用Opencv自带函数,这里给一个函数,以实现这个功能,是我毕设的很小一部分,需要的可以直接拿过去用。
效果:
填充使用的是图片区域的像素平均值,做法直接粘贴这个函数就可以了,cx,cy是原图坐标中心,w, h是截图的宽高。
def cut_image_out_of_range(img, rect):
[cx, cy, w, h] = rect
a = cx - w/2
b = cx + w/2
c = cy - h/2
d = cy + h/2
xl = 0
yl = 0
if a < 0:
xl = abs(a)
else:
xl = 0
if c < 0:
yl = abs(c)
else:
yl = 0
if a < 0:
a = 0
if b > img.shape[1]:
b = img.shape[1]
if c < 0:
c = 0
if d > img.shape[0]:
d = img.shape[0]
img_inner = img[int(c): int(d), int(a): int(b), :]
color_B = np.mean(img_inner[:,:,0])
color_G = np.mean(img_inner[:,:,1])
color_R = np.mean(img_inner[:,:,2])
ret_img = np.ones((int(h), int(w), 3), dtype=np.uint8)
ret_img[:,:,0] = color_B
ret_img[:,:,1] = color_G
ret_img[:,:,2] = color_R
ret_img[int(yl):int(img_inner.shape[0]+yl), int(xl):int(img_inner.shape[1]+xl), :] = img_inner
return ret_img