博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
图像处理04
阅读量:5235 次
发布时间:2019-06-14

本文共 4209 字,大约阅读时间需要 14 分钟。

折腾了一大圈,最后还是移植到java上了…………

插段代码留个底。

1 import net.sourceforge.tess4j.ITesseract;  2 import net.sourceforge.tess4j.Tesseract;  3 import org.opencv.core.*;  4 import org.opencv.imgproc.Imgproc;  5   6 import javax.imageio.ImageIO;  7 import java.awt.image.BufferedImage;  8 import java.io.ByteArrayInputStream;  9 import java.io.InputStream; 10 import java.util.ArrayList; 11 import java.util.HashMap; 12 import java.util.List; 13 import java.util.Map; 14  15 import static org.opencv.imgcodecs.Imgcodecs.imencode; 16 import static org.opencv.imgcodecs.Imgcodecs.imread; 17 import static org.opencv.imgcodecs.Imgcodecs.imwrite; 18 import static org.opencv.imgproc.Imgproc.*; 19  20 public class textDetection { 21     static { 22         System.loadLibrary(Core.NATIVE_LIBRARY_NAME); 23     } 24  25     public static ITesseract instance = new Tesseract(); 26  27     public static void main(String[] args) { 28         System.out.println("hello"); 29  30         //ocr初始化 31         instance.setDatapath("C:\\Program Files (x86)\\Tesseract-OCR\\tessdata"); 32         //此处的-psm 7为参数,指定了识别目标为单行从左到右的字母,增加该参数可以提高识别率。 33         //但是不知道java怎么加这个参数。 34 //        List
config=new ArrayList
(); 35 // config.add("-psm 7"); 36 // instance.setConfigs(config); 37 38 //文字提取和识别 39 Mat img = imread("test2.jpg"); 40 List
pre = preprocess(img); 41 imwrite("test_1.jpg", pre.get(0)); 42 Map
region = dectection(pre.get(0), pre.get(1)); 43 57 } 58 59 // 图片预处理 60 //返回值中,0为二值化结果,1为腐蚀膨胀后的结果 61 public static List
preprocess(Mat img) { 62 List
re=new ArrayList
(); 63 Mat gray = new Mat(); 64 cvtColor(img, gray, COLOR_BGR2GRAY); 65 Mat th = new Mat(); 66 Imgproc.threshold(gray, th, 48, 255, THRESH_BINARY_INV); 67 re.add(th); 68 69 Mat element1=getStructuringElement(MORPH_RECT, new Size(10,10)); 70 Mat element2=getStructuringElement(MORPH_RECT, new Size(30,30)); 71 72 //腐蚀和膨胀 73 Mat erosion=new Mat(); 74 erode(th, erosion, element1); 75 Mat dilation=new Mat(); 76 dilate(erosion, dilation, element2); 77 Mat dilation2=new Mat(); 78 dilate(dilation, dilation2, element2); 79 Mat dilation3=new Mat(); 80 dilate(dilation2, dilation3, element2); 81 re.add(dilation3); 82 83 //中间图输出 84 // imwrite("binary.png", th); 85 // imwrite("dilation.png", dilation); 86 // imwrite("erosion.png", erosion); 87 // imwrite("dilation2.png", dilation2); 88 89 90 return re; 91 } 92 93 // 文字提取和识别 94 //参数img为二值化结果,用于文字识别。position为腐蚀膨胀结果,用于文字提取。 95 //返回值为矩形框和其对应的文字识别结果的map 96 public static Map
dectection(Mat img, Mat position) { 97 List
pointlist=new ArrayList
(); 98 Mat mat=new Mat(); 99 findContours(position, pointlist, mat, RETR_EXTERNAL, CHAIN_APPROX_SIMPLE);100 int i=1;101 Map
re=new HashMap
();102 for (MatOfPoint point:pointlist) {103 Rect rect = boundingRect(point);104 System.out.println(i+" "+rect.x+" "+rect.y+" "+rect.width+" "+rect.height);105 i++;106 rectangle(img, new Point(rect.x, rect.y), new Point(rect.x+rect.width, rect.y+rect.height), new Scalar(255, 0, 0));107 Mat sub_mat=img.submat(rect.y, rect.y+rect.height, rect.x, rect.x+rect.width);108 BufferedImage bimage=getImage(sub_mat);109 try {110 String answer = instance.doOCR(bimage);111 //System.out.println(answer);112 re.put(rect, answer);113 } catch (Exception e) {114 e.printStackTrace();115 }116 }117 //imwrite("test_2.jpg", img);118 return re;119 }120 121 // mat转bufferedimage122 public static BufferedImage getImage(Mat img) {123 MatOfByte mob= new MatOfByte();124 imencode(".jpg", img, mob);125 byte[] byteArray = mob.toArray();126 BufferedImage bufImage = null;127 try {128 InputStream in = new ByteArrayInputStream(byteArray);129 bufImage = ImageIO.read(in);130 } catch (Exception e) {131 e.printStackTrace();132 }133 return bufImage;134 }135 166 167 //两点距离168 public static Double dis(Double[] a, Double[] b) {169 return Math.sqrt(dis_s(a, b));170 }171 172 //两点距离的平方173 public static Double dis_s(Double[] a, Double[] b) {174 return ((a[0]-b[0])*(a[0]-b[0])+(a[1]-b[1])*(a[1]-b[1]));175 }176 177 }

 

转载于:https://www.cnblogs.com/wangzhao765/p/8276313.html

你可能感兴趣的文章
Day12 SET运算符
查看>>
Netty之ChannelOption的各种参数之EpollChannelOption.SO_REUSEPORT
查看>>
Comet技术浅论
查看>>
JAVA 添加、修改和删除PDF书签
查看>>
bzoj 4671 异或图——容斥+斯特林反演+线性基
查看>>
洛谷4316绿豆蛙的归宿
查看>>
nginx反向代理Tomcat/Jetty获取客户端IP地址
查看>>
Linux系统iptables查看、设置、保存、备份和恢复
查看>>
Myeclipse常用的默认快捷键
查看>>
edittext文字变化监听的坑
查看>>
Android studio中设置颜色的状态选择器
查看>>
JPA EntityManager详解
查看>>
面试笔记
查看>>
转: java DES的算法片码
查看>>
qt运行时连接signal和slot
查看>>
C#中treeview的问题,如何区分根节点和子节点以及根节点和根节点的兄弟节点?...
查看>>
HTML超链接
查看>>
洛谷P2763 试题库问题(最大流)
查看>>
洛谷P2770 航空路线问题(费用流)
查看>>
洛谷P4001 [BJOI2006]狼抓兔子(平面图转对偶图)
查看>>