Python去掉图片四周纯色边框

时间:2022-07-22
本文章向大家介绍Python去掉图片四周纯色边框,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

有没有遇到过这样的情况,一张好好的图片四周却有一圈黑色或者白色的边框。如果插入到ppt中,还需要手动去裁剪,相当麻烦。今天我们就用python来自动裁剪掉四周不需要的纯色边框。

我们就以下面这两张图为例子,一张有纯黑色边框,一张有纯白色边框。

先来去掉黑色边框。我们知道黑色的RGB值是[0,0,0],因此大体思路就是先获取整张图片的像素,比如black.jpg的信息可以用右键查看属性如下:

也就是说这张图有378行,571列像素。然后逐行和逐列去判断,所有像素点RGB值之和。理论上只需要大于0就可以认为是内容部分了。但是这里为了防止有些比较接近于黑色的纯色边框,我们把阈值设为50。这个值可以自己根据需要调节。

from skimage import io

def corp_margin(img):
        img2=img.sum(axis=2)
        (row,col)=img2.shape
        row_top=0
        raw_down=0
        col_top=0
        col_down=0
        for r in range(0,row):
                if img2.sum(axis=1)[r]>50*col:
                        row_top=r
                        break
 
        for r in range(row-1,0,-1):
                if img2.sum(axis=1)[r]>50*col:
                        raw_down=r
                        break
 
        for c in range(0,col):
                if img2.sum(axis=0)[c]>50*row:
                        col_top=c
                        break
 
        for c in range(col-1,0,-1):
                if img2.sum(axis=0)[c]>50*row:
                        col_down=c
                        break
 
        new_img=img[row_top:raw_down+1,col_top:col_down+1,0:3]
        return new_img
im = io.imread('black.jpg')
img_re = corp_margin(im)
io.imsave('black_rm.png',img_re)
io.imshow(img_re)

那么相应的去除白色边框也很容易了,白色的RGB值是[255,255,255],因此只需要像素点RGB之和小于255*3=765就可以了

from skimage import io

def corp_margin(img):
        img2=img.sum(axis=2)
        (row,col)=img2.shape
        row_top=0
        raw_down=0
        col_top=0
        col_down=0
        for r in range(0,row):
                if img2.sum(axis=1)[r]<765*col:
                        row_top=r
                        break
 
        for r in range(row-1,0,-1):
                if img2.sum(axis=1)[r]<765*col:
                        raw_down=r
                        break
 
        for c in range(0,col):
                if img2.sum(axis=0)[c]<765*row:
                        col_top=c
                        break
 
        for c in range(col-1,0,-1):
                if img2.sum(axis=0)[c]<765*row:
                        col_down=c
                        break
 
        new_img=img[row_top:raw_down+1,col_top:col_down+1,0:3]
        return new_img
im = io.imread('white.jpg')
img_re = corp_margin(im)
io.imsave('white_rm.png',img_re)
io.imshow(img_re)

最后我们都能得到这样一张图

其他颜色的纯色边框,可以自己去尝试调节RGB的阈值来实现。