工程下载

https://download.csdn.net/download/qq_16596909/11505994

比较适合与验证码的处理,毕竟八邻域降噪不能消除比较大的噪点,为了尽量减少噪点对后续识别精度产生负面影响,

最好还是把文字拆分为单个的字符图像,然后再去识别,精度会更高一些

垂直投影和水平投影结合起来分割,可以做到截取最小的分辨率,减少干扰

垂直投影

  private org.opencv.core.Mat projectionVerticality(org.opencv.core.Mat mat) {
org.opencv.core.Mat projectionMat = mat.clone();//曲线救国,获取同样一个mat
projectionMat.setTo(new org.opencv.core.Scalar(255));//然后再把颜色换成白色
Double[] dotList = new Double[mat.cols()];//创建一个list用于存储每一列的黑点数量
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
System.out.println(mat.dump());
int col = mat.cols();
int row = mat.rows();
for (int x = 0; x < col; x++) {
dotList[x] = 0.0;
for (int y = 0; y < row; y++) {
double binData = mat.get(y, x)[0];
if (binData == 0) {//黑色 dotList[x]++;
}
}
}
//然后生成投影图
for (int x = 0; x < mat.cols(); x++) {
for (int y = 0; y < mat.rows(); y++) {
if (x == 147) {
System.out.println("下一行将会出现错误");
}
if (y < dotList[x]) {
projectionMat.put(y, x, 0);
System.out.println(x + "列" + y + "行");
} } } return projectionMat;
}

水平投影

 private org.opencv.core.Mat projectionHorizontal(org.opencv.core.Mat mat) {
org.opencv.core.Mat projectionMat = mat.clone();//曲线救国,获取同样一个mat
projectionMat.setTo(new org.opencv.core.Scalar(255));//然后再把颜色换成白色
Double[] dotList = new Double[mat.rows()];//创建一个list用于存储每一列的黑点数量
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
System.out.println(mat.dump());
int col = mat.cols();
int row = mat.rows();
for (int y = 0; y < row; y++) {
dotList[y] = 0.0;
for (int x = 0; x < col; x++) {
double binData = mat.get(y, x)[0];
if (binData == 0) {//黑色
dotList[y]++;
}
}
}
//然后生成投影图
for (int y = 0; y < mat.rows(); y++) {
for (int x = 0; x < mat.cols(); x++) {
try {
if (x < dotList[y]) {
projectionMat.put(y, x, 0);
}
} catch (Exception e) {
System.out.println("正在处理第:" + y + "行,第" + x + "列");
}
}
}
return projectionMat;
}

opencv4 java投影的更多相关文章

  1. opencv4 java 验证码噪点 8邻域降噪

    工程下载地址https://download.csdn.net/download/qq_16596909/11503962 程序运行后,同样会把图片存放在以下路径 首先来看一下原图 二值化后,可以把这 ...

  2. OPENCV 图像缩放

    工程下载地址 https://download.csdn.net/download/qq_16596909/11522434 opencv4 java netbeans开发,基于maven 可以按照倍 ...

  3. Spark案例分析

    一.需求:计算网页访问量前三名 import org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext} /* ...

  4. [原创]java WEB学习笔记90:Hibernate学习之路-- -HQL检索方式,分页查询,命名查询语句,投影查询,报表查询

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  5. Java基于opencv实现图像数字识别(五)—投影法分割字符

    Java基于opencv实现图像数字识别(五)-投影法分割字符 水平投影法 1.水平投影法就是先用一个数组统计出图像每行黑色像素点的个数(二值化的图像): 2.选出一个最优的阀值,根据比这个阀值大或小 ...

  6. Ubuntu16桌面版编译OpenCV4的java库和so库

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  7. 轻量级Java EE企业应用实战(第4版):Struts 2+Spring 4+Hibernate整合开发(含CD光盘1张)

    轻量级Java EE企业应用实战(第4版):Struts 2+Spring 4+Hibernate整合开发(含CD光盘1张)(国家级奖项获奖作品升级版,四版累计印刷27次发行量超10万册的轻量级Jav ...

  8. 【Java EE 学习 48】【Hibernate学习第五天】【抓取策略】【二级缓存】【HQL】

    一.抓取策略. 1.hibernate中提供了三种抓取策略. (1)连接抓取(Join Fetch):这种抓取方式是默认的抓取方式.使用这种抓取方式hibernate会在select中内连接的方式获取 ...

  9. 【Java EE 学习 36】【struts2】【struts2系统验证】【struts2 ognl值栈】【struts2 ongl标签】【struts2 UI标签】【struts2模型驱动和令牌机制】

    一.struts2系统验证 1.基于struts2系统验证的方式实际上就是通过配置xml文件的方式达到验证的目的. 2.实际上系统校验的方法和手工校验的方法在底层的基本实现是相同的.但是使用系统校验的 ...

随机推荐

  1. CSS3视口单位vw,wh

    vw和vh是视口(viewport units)单位,何谓视口,就是根据你浏览器窗口的大小的单位,不受显示器分辨率的影响,是不是很神奇,这就代表了,我们不需要顾虑到现在那么多不同电脑有关分辨率的自适应 ...

  2. python基于SMTP发送邮件

    import smtplib from email.header import Header from email.mime.text import MIMEText ''' SMTP是发送邮件的协议 ...

  3. PAT甲级——A1109 Group Photo【25】

    Formation is very important when taking a group photo. Given the rules of forming K rows with Npeopl ...

  4. C++命令行多文件编译(g++)

    在刚开始学Java时用命令行进行编译代码.而C++一直在用IDE, 这次尝试下命令行编译.vs下也可以用cl.exe.link.exe等命令来进行编译 但这次是通过安装MinGW来学习命令编译,主要用 ...

  5. printk函数打开和关闭消息

    在驱动开发的早期, printk 非常有助于调试和测试新代码. 当你正式发行驱动时, 换句 话说, 你应当去掉, 或者至少关闭, 这些打印语句. 不幸的是, 你很可能会发现, 就在你 认为你不再需要这 ...

  6. Linux-c对一个十六进制数的某一位取反

    enum SWITCH_FLAG { SWITCH_ALL_FLAG = , SWITCH_WEB_FLAG = , …… } unsigned int switch_by_bit_value = 0 ...

  7. Python全栈开发:json与pickle

    #!/usr/bin/env python # -*- coding;utf-8 -*- """ 正解(序列化):将Python数据类型转换成json或者pickle格式 ...

  8. Android开发 LevelListDrawable详解

    前言 此篇博客正在施工中... 作者其实就是想挖个坑备忘一下... 十分抱歉, 可以参考https://www.jianshu.com/p/f9ec65241b6b

  9. LUOGU P2476 [SCOI2008]着色方案

    传送门 解题思路 毒瘤题,,刚开始写了个奇奇怪怪的哈希,结果T了5个点..后来深(kan)入(le)思(ti)考(jie),发现c的范围很小,设$f[a][b][c][d][e][pre]​$表示还能 ...

  10. flask请求上下文源码分析

    一.什么是上下文 每一段程序都有很多外部变量,只有像add这种简单的函数才是没有外部变量的,一旦你的一段程序有了外部变量,这段程序就不完整了,不能独立运行,你为了使他们能运行,就要给所有的外部变量一个 ...