分享完美解决批量化切割图片中文字的方法(附切割工具)
- soomal要将下面图片上的每组字切割成一张单独的图片,如图中“上”字,切割好能按从右到左,从上到下的顺序自动编号,大概有一百多张图片,纯手工切割,工作量大的吓人,想着有什么办法可以实现批量化切割。
不知有什么办法切割效率高一些。好在每组文字大小差不多大,如果有一款能自动识别图中文字黑边并自动切割的软件就简单了,在线等高人帮忙。
感谢4楼,提供的一款漫画工具软件,里面有切边功能,能自动识别每组字的边缘,可惜只能对图片切边,不能切割成多张小图。
感谢18楼提供的PS切片方法,由于图中有些行列字不对齐,使用横平竖直的辅助线会将很多字切残,后期修补工作量也很大。
感谢euzen在67楼提供PY切割源代码,又打包成可执行文件在68楼,后又增加了修改参数,见74楼和82楼修改版。
手动选合适切割高度,基本可以自动识别,编码有规律方便校对,工作效率*提高,万分感谢!python让我又见证了奇迹。 - soomal希望有这方面经验的朋友指点一下
- ivory007你这个图片里面的内容不一样,不能像人眼一样识别之后处理。
如果是规范的,可以用ps或者turbophoto之类的批量处理软件。 - Zerolone这个可能要切好多次, 先横着切, 然后竖着切。 有一个切漫画的软件, 你可以试试。
- qiuyibin这是什么文?
- soomal
- soomal
- 出租车司机你这个文件字间距不统一,PS批处理估计不行
- 星辰大海两个“當”字为啥写法不一样?
- soomal
- soomal继续求助
- ZeroloneComicEnhancerPro
- autumnc这个是画符用的字吧?这是哪一部道经?
- soomal
- hikech计算机视觉之目标检测再分割?
- soomal
- cnsn
- soomal
- 0fifa老老实实ps吧
- soomal2020年了,啥都智能化了,在线等高人放大招
- soomal继续等
- soomal继续寻求帮助
- lyzj2001给你个提示 验证码切割
- apolodi去猪八戒找人帮着适应一下你的文件,应该就可以了。复制代码
- import cv2
- import numpy as np
- # load image
- img = cv2.imread('image.jpg')
- rsz_img = cv2.resize(img, None, fx=0.25, fy=0.25) # resize since image is huge
- gray = cv2.cvtColor(rsz_img, cv2.COLOR_BGR2GRAY) # convert to grayscale
- # threshold to get just the signature
- retval, thresh_gray = cv2.threshold(gray, thresh=100, maxval=255, type=cv2.THRESH_BINARY)
- # find where the signature is and make a cropped region
- points = np.argwhere(thresh_gray==0) # find where the black pixels are
- points = np.fliplr(points) # store them in x,y coordinates instead of row,col indices
- x, y, w, h = cv2.boundingRect(points) # create a rectangle around those points
- x, y, w, h = x-10, y-10, w+20, h+20 # make the box a little bigger
- crop = gray[y:y+h, x:x+w] # create a cropped region of the gray image
- # get the thresholded crop
- retval, thresh_crop = cv2.threshold(crop, thresh=200, maxval=255, type=cv2.THRESH_BINARY)
- # display
- cv2.imshow("Cropped and thresholded image", thresh_crop)
- cv2.waitKey(0)
- import cv2
- soomal
- soomal
- euzen不单是“当”字,其它好几个字在不同地方都是不同写法啊。 iOS fly ~
- soomal
- fankoouse python to find the edge.
- shannon_sdu关注一下 iOS fly ~
- txdyd回复1#soomal
这种劳动密集型工作当然是找热心志愿者了,每人分几页,一会儿就搞定了 - euzen
- yaohoo回复34#euzen
旋转90负切字的时候,可以设置切字的竖条间隔大小,设定是某一个范围,这样比较小的间隔就不切了,因为可能是一个字的上下两部分,简单加判断语句久可以 iOS fly ~ - 0fifa我好像想起来点什么,一会儿试试去。
- soomal回复34#euzen
看到一些云篆字和楷体字有点间隔被拆成两部分,识别区域能否再设置大一些,这样一组字可以包含楷体和云篆体。 - soomal回复37#0fifa
有灵感好,期待你的新思路 - zzy9903把这些都学会了,是不是就可以学洗髓经易筋经继而打通任督二脉天下无敌了?
- soomal回复34#euzen
python的图像识别好强大,这些字相对清晰有规律,今天安装一下也好好研究。
昨晚把原始图片重新对齐切了一下边,原始图就是一楼两张合在一起的样子,这样文件数只有65张,尽量保证每张图尺寸接近,便于后期识别处理。
如果大家有兴趣,我把原始图发上来给大家试试,集思广益。 - 0fifa发个原图伙计,压缩后的图没法实际测试。
- 0fifa用这个完美解决!
- soomal
- soomal
- am99
- 0fifa
- soomal
- am99回复48#soomal
原图
二值化后投影,就是各在行列方向上将像素计算总和,通过统计特性比如方差,判断文本是横式还是竖式,这里选取竖式
然后按列切割,在每一列上做横向投影选取切割点
主要需要关注切割点的选取,想要更好的结果需要看文本特点结合以下几个依据综合处理
1,前面提到的投影值的峰谷
2,某些自结构问题本身会出现自内切割,需要依赖统计信息,比如大部分字高为1~1.5cm,那么0.5cm的切割你要考虑是否把它看作某个上下结构的部首,需要合并。
3,使用dbscan做字迹的连通性考察
可以看到我的结果里面右下角三个位置也有些问题,最终版本还没找到,但是作为启发思路肯定够了 - soomal