Python trim图片

之前那个去除图片四周空白区域,针对的图片是背景前景只有两个值的,这种一般是自己生成的图片或者文档图片扫描图片能这么规则,但对于实际手写图片,就无能为力了,当初处理自己生成的训练集图片,前景背景值已知用这个方法,现在测试真实图片稍微复杂些,不过原理差不多。

先找出阈值ret

ret, otsu = cv2.threshold(img,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)

再从图片四周往里检查,比如从行来看,从0行到rol-1行如果一行有k个像素点的的值大于阈值那,认为这是实际汉字的上边界,从rol-1行到第0行,如果一行有k个像素点的的值大于阈值那,认为这是实际汉字的下边界,同理找出左右边界,边界有了,抠图很容易。

def trim(img, thresh):
        k=1#当大于阈值的像素点超过k个就认为是边界,这个也可以调,噪点多的话,要先去噪,k适当增大
        thresh=thresh-20#调节作用,避免截的太狠
        (row, col) = img.shape
        tempr0 = 0
        tempr1 = row-1
        tempc0 = 0
        tempc1 = col-1
        for c in range(0, col):
                if sum(map(lambda x:x<thresh,img[:,c]))>k:
                        tempc0 = c
                        break
        for c in range(col - 1, 0, -1):
                if sum(map(lambda x: x < thresh, img[:, c])) > k:
                        tempc1 = c
                        break
        for r in range(0, row):
                    if sum(map(lambda x: x < thresh, img[r, :])) > k:
                        tempr0 = r
                        break
        for r in range(row - 1, 0, -1):
                    if sum(map(lambda x: x < thresh, img[r, :])) > k:
                        tempr1 = r
                        break
        new_img = img[tempr0:tempr1 + 1, tempc0:tempc1 + 1]
        return new_img

img=cv2.imread('../../chc/data/small_roi/'+lists[i],0)
ret, otsu = cv2.threshold(img,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)
img2=trim(img,ret)

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值