欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Java基于opencv实现图像数字识别(一)

程序员文章站 2024-03-07 22:08:15
...

Java基于opencv实现图像数字识别(一)

最近分到了一个任务,要做数字识别,我分配到的任务是把数字一个个的分开;当时一脸懵逼,直接百度java如何分割图片中的数字,然后就百度到了用BufferedImage这个类进行操作;尝试着做了一下,做到灰度化,和二值化就做不下去了;然后几乎就没有啥java的资料了,最多的好像都是c++,惹不起、惹不起……

我也想尝试着用c++做一下,百度到了c++基于opencv来做图像识别的;但是要下vs啊,十几个g呢,我内存这么小,配置这么麻烦,而且vs各个版本又有自己的特色;百度了以下,java基于opencv来做图像识别,发现也很少,但是有资料啊,而且配置也很简单啊,能做到就做到哪,慢慢学;现在我已经做到切割图片了,用的是投影法,效果还可以。可以先看以下
Java基于opencv实现图像数字识别(一)

我们来一步步实现,先从下载opencv、配置java环境、写一个测试用例开始;肯定比你想象中的要简单

一、下载opencv,我用的是windows系统,这个应该没啥区别吧,java跨平台的

直接百度搜索opencv,建议去opencv中文网站下载吧;我刚开始下载的时候,下到一大半的时候突然停了,就这样停了;明明中文网站啊,还需要*吗;算了,我还是*吧,然后就下好了,一步步安装,就好了,没啥难的。安装好后,就长这样,我也没有配置环境;
Java基于opencv实现图像数字识别(一)

二、配置java开发环境

也很简单,就是把F:\openCv\opencv\build\java这个目录下的一个jar添加到环境变量,然后看你是系统是多少位的,把相应目录下的文件拷贝到你的项目中
Java基于opencv实现图像数字识别(一)
空项目大概就是这样
Java基于opencv实现图像数字识别(一)

三、我们测试一下,就用opencv二值化处理一张图片

我们来看一下代码

public static void main(String[] args) {
        // 这个必须要写,不写报java.lang.UnsatisfiedLinkError
         System.loadLibrary(Core.NATIVE_LIBRARY_NAME);

        File imgFile = new File("C:/Users/admin/Desktop/open/test.png");
        String dest = "C:/Users/admin/Desktop/open";
        Mat src = Imgcodecs.imread(imgFile.toString(), Imgcodecs.CV_LOAD_IMAGE_GRAYSCALE);

        Mat dst = new Mat();

        Imgproc.adaptiveThreshold(src, dst, 255, Imgproc.ADAPTIVE_THRESH_MEAN_C, Imgproc.THRESH_BINARY, 13, 5);
        Imgcodecs.imwrite(dest + "/AdaptiveThreshold" + imgFile.getName(), dst);
    }

我们来看一下效果图
Java基于opencv实现图像数字识别(一)

相关标签: opencv java