前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python去掉图片四周纯色边框

Python去掉图片四周纯色边框

作者头像
生信交流平台
发布2020-08-06 11:11:18
2.9K0
发布2020-08-06 11:11:18
举报

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

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

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

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

代码语言:javascript
复制
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就可以了

代码语言:javascript
复制
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的阈值来实现。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-02-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 生信交流平台 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档