最近要寫一個自動生成報表的程序,具體是將一堆存儲在數據庫的表格作成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