opencv4 java投影
工程下载
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投影的更多相关文章
- opencv4 java 验证码噪点 8邻域降噪
工程下载地址https://download.csdn.net/download/qq_16596909/11503962 程序运行后,同样会把图片存放在以下路径 首先来看一下原图 二值化后,可以把这 ...
- OPENCV 图像缩放
工程下载地址 https://download.csdn.net/download/qq_16596909/11522434 opencv4 java netbeans开发,基于maven 可以按照倍 ...
- Spark案例分析
一.需求:计算网页访问量前三名 import org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext} /* ...
- [原创]java WEB学习笔记90:Hibernate学习之路-- -HQL检索方式,分页查询,命名查询语句,投影查询,报表查询
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- Java基于opencv实现图像数字识别(五)—投影法分割字符
Java基于opencv实现图像数字识别(五)-投影法分割字符 水平投影法 1.水平投影法就是先用一个数组统计出图像每行黑色像素点的个数(二值化的图像): 2.选出一个最优的阀值,根据比这个阀值大或小 ...
- Ubuntu16桌面版编译OpenCV4的java库和so库
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- 轻量级Java EE企业应用实战(第4版):Struts 2+Spring 4+Hibernate整合开发(含CD光盘1张)
轻量级Java EE企业应用实战(第4版):Struts 2+Spring 4+Hibernate整合开发(含CD光盘1张)(国家级奖项获奖作品升级版,四版累计印刷27次发行量超10万册的轻量级Jav ...
- 【Java EE 学习 48】【Hibernate学习第五天】【抓取策略】【二级缓存】【HQL】
一.抓取策略. 1.hibernate中提供了三种抓取策略. (1)连接抓取(Join Fetch):这种抓取方式是默认的抓取方式.使用这种抓取方式hibernate会在select中内连接的方式获取 ...
- 【Java EE 学习 36】【struts2】【struts2系统验证】【struts2 ognl值栈】【struts2 ongl标签】【struts2 UI标签】【struts2模型驱动和令牌机制】
一.struts2系统验证 1.基于struts2系统验证的方式实际上就是通过配置xml文件的方式达到验证的目的. 2.实际上系统校验的方法和手工校验的方法在底层的基本实现是相同的.但是使用系统校验的 ...
随机推荐
- JAVA 设计的七大原则
一.开闭原则 开闭原则(Open-Closed Principle, OCP)是指一个软件实体如类.模块和函数应该对 扩展开放,对修改关闭. 所谓的开闭,也正是对扩展和修改两个行为的一个原则.强调 的 ...
- 《Python之BMI计算》
<Python之BMI计算> 前段时间写了个 BMI 因为刚刚开始学 有几个错误 第一个: 厘米我当时也没注意因为觉得去掉0.00的话后面1866666666是正确的BMI值 刚刚去看看去 ...
- 使用virtualenv发布Python程序
客户环境不能上网,开始想把所有依赖包下载下来,进入客户环境进行安装.但为了避免出差,部署工作交给其他同事了,我想还是需要更简单的方式. 实验了一下virtualenv是可以的 1. 创建一个新的环境( ...
- Censored! POJ - 1625 AC自动机+大数DP
题意: 给出一n种字符的字典,有p个禁用的单词, 问能组成多少个不同的长度为m的合法字符串.(m<=50) 题解: 是不是个我们之前做的题目非常非常像,题意都一样. 直接将上次写的AC自动机+矩 ...
- 实现ViewPager的联动效果
参考链接:android - Synchronizing two ViewPagers using OnPageChangeListener - Stack Overflow 其中有个非常完美的解决方 ...
- 18-6-calsslist
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Geoserver的跨域问题
使用tomcat访问Geoserver服务的时候,只调服务没问题,但是查询要素属性的时候出现如下“XMLHttpRequest”.“not allowed by Access-Control-Allo ...
- select函数使用
这两天写了这么一段代码,select直接返回-1,错误信息是“invalid argments”,显然没有达到阻塞超时的效果. 代码如下: bool IsSocketWaitRead(inf fd,i ...
- LeetCode 14.最长公共前缀(Python3)
题目: 编写一个函数来查找字符串数组中的最长公共前缀. 如果不存在公共前缀,返回空字符串 "". 示例 1: 输入: ["flower","flow& ...
- mysql出现ERROR 1366 (HY000):的解决办法
今天向新建的表中添加内容,出现以下错误: mysql> INSERT tdb_goods (goods_name,goods_cate,brand_name,goods_price,is_sho ...