使用Opencv python进行图片截取选取边缘越界图片

我们有时候使用Opencv截取一些图片的的时候,会选取到图片以外的区域,如何填充这种区域貌似没法直接用Opencv自带函数,这里给一个函数,以实现这个功能,是我毕设的很小一部分,需要的可以直接拿过去用。

效果:

使用Opencv python进行图片截取选取边缘越界图片_第1张图片            使用Opencv python进行图片截取选取边缘越界图片_第2张图片

填充使用的是图片区域的像素平均值,做法直接粘贴这个函数就可以了,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

 

你可能感兴趣的:(Opencv)