opencv4 java投影
Posted jnhs
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了opencv4 java投影相关的知识,希望对你有一定的参考价值。
比较适合与验证码的处理,毕竟八邻域降噪不能消除比较大的噪点,为了尽量减少噪点对后续识别精度产生负面影响,
最好还是把文字拆分为单个的字符图像,然后再去识别,精度会更高一些
垂直投影和水平投影结合起来分割,可以做到截取最小的分辨率,减少干扰
垂直投影
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投影的主要内容,如果未能解决你的问题,请参考以下文章
Ubuntu16桌面版编译OpenCV4的java库和so库
Ubuntu16桌面版编译OpenCV4的java库和so库
OpenCV4Android:non-system libraries in linker flags: -lopencv_java错误的解决