1. 程式人生 > >Java基於opencv實現圖像數字識別(一)

Java基於opencv實現圖像數字識別(一)

binary oid ring 是把 sca pre 內存 還需要 自己

Java基於opencv實現圖像數字識別(一)

最近分到了一個任務,要做數字識別,我分配到的任務是把數字一個個的分開;當時一臉懵逼,直接百度java如何分割圖片中的數字,然後就百度到了用BufferedImage這個類進行操作;嘗試著做了一下,做到灰度化,和二值化就做不下去了;然後幾乎就沒有啥java的資料了,最多的好像都是c++,惹不起、惹不起......

我也想嘗試著用c++做一下,百度到了c++基於opencv來做圖像識別的;但是要下vs啊,十幾個g呢,我內存這麽小,配置這麽麻煩,而且vs各個版本又有自己的特色;百度了以下,java基於opencv來做圖像識別,發現也很少,但是有資料啊,而且配置也很簡單啊,能做到就做到哪,慢慢學;現在我已經做到切割圖片了,用的是投影法,效果還可以。可以先看以下

技術分享圖片

我們來一步步實現,先從下載opencv、配置java環境、寫一個測試用例開始;肯定比你想象中的要簡單

一、下載opencv,我用的是windows系統,這個應該沒啥區別吧,java跨平臺的

直接百度搜索opencv,建議去opencv中文網站下載吧;我剛開始下載的時候,下到一大半的時候突然停了,就這樣停了;明明中文網站啊,還需要梯子嗎;算了,我還是FQ吧,然後就下好了,一步步安裝,就好了,沒啥難的。安裝好後,就長這樣,我也沒有配置環境;

技術分享圖片

二、配置java開發環境

也很簡單,就是把F:\openCv\opencv\build\java這個目錄下的一個jar添加到環境變量,然後看你是系統是多少位的,把相應目錄下的文件拷貝到你的項目中

技術分享圖片

空項目大概就是這樣
技術分享圖片

三、我們測試一下,就用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實現圖像數字識別(一)