分享完美解决批量化切割图片中文字的方法(附切割工具)

  • s
    soomal
    要将下面图片上的每组字切割成一张单独的图片,如图中“上”字,切割好能按从右到左,从上到下的顺序自动编号,大概有一百多张图片,纯手工切割,工作量大的吓人,想着有什么办法可以实现批量化切割。

    不知有什么办法切割效率高一些。好在每组文字大小差不多大,如果有一款能自动识别图中文字黑边并自动切割的软件就简单了,在线等高人帮忙。







    感谢4楼,提供的一款漫画工具软件,里面有切边功能,能自动识别每组字的边缘,可惜只能对图片切边,不能切割成多张小图。


    感谢18楼提供的PS切片方法,由于图中有些行列字不对齐,使用横平竖直的辅助线会将很多字切残,后期修补工作量也很大。



    感谢euzen在67楼提供PY切割源代码,又打包成可执行文件在68楼,后又增加了修改参数,见74楼和82楼修改版。


    手动选合适切割高度,基本可以自动识别,编码有规律方便校对,工作效率*提高,万分感谢!python让我又见证了奇迹。
  • s
    soomal
    希望有这方面经验的朋友指点一下
  • i
    ivory007
    你这个图片里面的内容不一样,不能像人眼一样识别之后处理。

    如果是规范的,可以用ps或者turbophoto之类的批量处理软件。
  • Z
    Zerolone
    这个可能要切好多次, 先横着切, 然后竖着切。 有一个切漫画的软件, 你可以试试。
  • q
    qiuyibin
    这是什么文?
  • s
    soomal
    回复4#Zerolone


    那个漫画软件叫什么名字?
  • s
    soomal
    回复5#qiuyibin


    道藏中的古文字
  • 出租车司机
    你这个文件字间距不统一,PS批处理估计不行
  • 星辰大海
    两个“當”字为啥写法不一样?
  • s
    soomal
    回复9#星辰大海


    或许当的意思不同,写法不同
  • s
    soomal
    继续求助
  • Z
    Zerolone
    ComicEnhancerPro
  • a
    autumnc
    这个是画符用的字吧?这是哪一部道经?
  • s
    soomal
    回复14#autumnc


    云篆度人经
  • h
    hikech
    计算机视觉之目标检测再分割?
  • s
    soomal
    回复13#Zerolone


    谢谢,已经下载了,里面有个切边功能,是可以实现图片上切字,能否批量切?
  • c
    cnsn
    回复17#soomal
    PS拉辅助线,每一行,每一列都拉一根。大致看了一下,大部分都是可以的,少数几个细调一下位置。然后切片工具,通过辅助线建立切片。导出web所用格式就好了
    iOS fly ~
  • s
    soomal
    回复18#cnsn


    需要一幅图一副图调整了切了,批量看来不好操作
  • 0
    0fifa
    老老实实ps吧
  • s
    soomal
    2020年了,啥都智能化了,在线等高人放大招
  • s
    soomal
    继续等
  • s
    soomal
    继续寻求帮助
  • l
    lyzj2001
    给你个提示 验证码切割
  • a
    apolodi
    1. import cv2
    2. import numpy as np

    3. # load image
    4. img = cv2.imread('image.jpg')
    5. rsz_img = cv2.resize(img, None, fx=0.25, fy=0.25) # resize since image is huge
    6. gray = cv2.cvtColor(rsz_img, cv2.COLOR_BGR2GRAY) # convert to grayscale

    7. # threshold to get just the signature
    8. retval, thresh_gray = cv2.threshold(gray, thresh=100, maxval=255, type=cv2.THRESH_BINARY)

    9. # find where the signature is and make a cropped region
    10. points = np.argwhere(thresh_gray==0) # find where the black pixels are
    11. points = np.fliplr(points) # store them in x,y coordinates instead of row,col indices
    12. x, y, w, h = cv2.boundingRect(points) # create a rectangle around those points
    13. x, y, w, h = x-10, y-10, w+20, h+20 # make the box a little bigger
    14. crop = gray[y:y+h, x:x+w] # create a cropped region of the gray image

    15. # get the thresholded crop
    16. retval, thresh_crop = cv2.threshold(crop, thresh=200, maxval=255, type=cv2.THRESH_BINARY)

    17. # display
    18. cv2.imshow("Cropped and thresholded image", thresh_crop)
    19. cv2.waitKey(0)
    复制代码
    去猪八戒找人帮着适应一下你的文件,应该就可以了。
  • s
    soomal
    回复25#apolodi


    完全看不懂了,是传说中的python智能切割代码吧,想自己搞,也不知道去找谁,能进一步提示吗?
  • s
    soomal
    回复24#lyzj2001


    搜了一下,有戏,从头学到能切割,能否指一条捷径?
  • e
    euzen
    不单是“当”字,其它好几个字在不同地方都是不同写法啊。 iOS fly ~
  • q
    qjzhxuju
    试了一下,由于列与列之间的空位很明显,用ComicEnhancerPro还是很容易按列裁割的,下一步需要人工或人工智能了。
  • s
    soomal
    回复29#qjzhxuju


    请问一页切成多列是怎么切的,我试了一页只能切成一列
  • f
    fankoo
    use python to find the edge.
  • s
    shannon_sdu
    关注一下 iOS fly ~
  • t
    txdyd
    回复1#soomal
    这种劳动密集型工作当然是找热心志愿者了,每人分几页,一会儿就搞定了
  • e
    euzen
    回复1#soomal


    python简单可行,请参考上一层回复。
  • y
    yaohoo
    回复34#euzen
    旋转90负切字的时候,可以设置切字的竖条间隔大小,设定是某一个范围,这样比较小的间隔就不切了,因为可能是一个字的上下两部分,简单加判断语句久可以 iOS fly ~
  • 0
    0fifa
    我好像想起来点什么,一会儿试试去。
  • s
    soomal
    回复34#euzen
    看到一些云篆字和楷体字有点间隔被拆成两部分,识别区域能否再设置大一些,这样一组字可以包含楷体和云篆体。
  • s
    soomal
    回复37#0fifa
    有灵感好,期待你的新思路
  • z
    zzy9903
    把这些都学会了,是不是就可以学洗髓经易筋经继而打通任督二脉天下无敌了?
  • s
    soomal
    回复34#euzen
    python的图像识别好强大,这些字相对清晰有规律,今天安装一下也好好研究。

    昨晚把原始图片重新对齐切了一下边,原始图就是一楼两张合在一起的样子,这样文件数只有65张,尽量保证每张图尺寸接近,便于后期识别处理。

    如果大家有兴趣,我把原始图发上来给大家试试,集思广益。
  • 0
    0fifa
    发个原图伙计,压缩后的图没法实际测试。
  • 0
    0fifa
    用这个完美解决!
  • s
    soomal
    回复42#0fifa

    切边处理过的原图,您试试能否切割
  • s
    soomal
    回复43#0fifa


    感谢,安装好了,打开图像库有很多参数,进一步选择要切割的图片还需要做些什么设置?
  • a
    am99
    回复45#soomal
    我做过全自动的在书法作品上切割
    基本原理是cv的投影法 iOS fly ~
  • 0
    0fifa
    回复45#soomal

    先垂直平均分割,然后横平投影分割。
  • s
    soomal
    回复46#am99


    厉害,书法手写单字切割出来再拼词句很常用,请教如何从零学python的CV投影?
  • a
    am99
    回复48#soomal

    原图

    二值化后投影,就是各在行列方向上将像素计算总和,通过统计特性比如方差,判断文本是横式还是竖式,这里选取竖式


    然后按列切割,在每一列上做横向投影选取切割点


    主要需要关注切割点的选取,想要更好的结果需要看文本特点结合以下几个依据综合处理
    1,前面提到的投影值的峰谷
    2,某些自结构问题本身会出现自内切割,需要依赖统计信息,比如大部分字高为1~1.5cm,那么0.5cm的切割你要考虑是否把它看作某个上下结构的部首,需要合并。
    3,使用dbscan做字迹的连通性考察

    可以看到我的结果里面右下角三个位置也有些问题,最终版本还没找到,但是作为启发思路肯定够了
  • s
    soomal
    回复49#am99


    python切的非常好,准备研究一下,您如果方便的话,试试切一下这图,看效果如何?