最近要写一个自动生成报表的程序,具体是将一堆存储在数据库的表格作成PDF而后盖上单位的章,章是以图片的形式给出的。
项目用的是JAVA语言,须要的库主要是itex。查了一轮itex的API以后大概有两种作法:算法
经过上面的介绍咱们就把问题转化到老本行数字图像处理上来了,就是提取出图片的二值化信息。
装好Python和Opencv开始干活。数据库
初始图片是这样的:
code
import numpy as np import cv2 I = cv2.imread('t1.jpg'); I_gray = cv2.cvtColor(I, CV_BGR2GRAY) #转成灰度图片 I_gray[I_gray > 220] = 255 I_gray[I_gray < 220] = 0 #获得二值化的图片,220是实验出来的 cv2.imwrite('t1_bin.png', I_gray)
这样就得到了二值化的签章。blog
而后在Java端处理图片
Image img = Image.getInstance("E:\\t1.jpg"); BufferedImage bi = ImageIO.read(new File("E:\\t1_bin.jpg")); BufferedImage newBi = new BufferedImage(bi.getWidth(),bi.getHeight(),BufferedImage.TYPE_BYTE_BINARY); newBi.getGraphics().drawImage(bi, 0, 0, null); ByteArrayOutputStream baos = new ByteArrayOutputStream(); ImageIO.write(newBi, "png", baos); Image mask = Image.getInstance(baos.toByteArray()); mask.makeMask(); img.setImageMask(mask);
这样就完成了签章的生成
get
具体作起来仍是比较顺利的,由于签章原本就须要很清楚,若是是其余东西可能须要腐蚀、膨胀甚至上watershed算法。
Java端也很顺利,照着API作一次就成了,很开心。it