有没有遇到过这样的情况,一张好好的图片四周却有一圈黑色或者白色的边框。如果插入到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的阈值来实现。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有