基於OpenCv與JVM實現加載保存圖像功能(JAVA 圖像處理)

加載圖片

openCv有一個名imread的簡單函數,用於從文件中讀取圖像

imread 函數位於Imgcodecs類的同名包中。

加載圖片代碼

import org.opencv.core.CvType;
import org.opencv.core.Mat;
import org.opencv.core.Core;
import org.opencv.imgcodecs.Imgcodecs;
import origami.Origami;
public class HelloCv {
    public static void main(String[] args) throws Exception {
        System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
        Mat mat = Imgcodecs.imread("./images/test.jpg");
        System.out.println(mat.width()+"x"+mat.height()+","+mat.type());
    }
}

加載成功會輸出以下消息

這個函數也可以加載灰度圖像

通過IMREAD_GRAYSCALE進行控制

Mat mat = Imgcodecs.imread("./images/test.jpg",Imgcodecs.IMREAD_GRAYSCALE);

IMREAD_GRAYSCALE將圖像強制轉換為灰度圖像並加載到Mat對象中

除瞭IMREAD_GRAYSCALE參數外,還可以傳遞其他參數得到特定的處理通道和圖像深度

保存圖片

imwrite函數可以用來保存圖片,也是 Imgcodecs類中

我們的圖片是彩色的,通過IMREAD_GRAYSCALE改變為灰度圖片,並以output.jpg為名輸出

import org.opencv.core.CvType;
import org.opencv.core.Mat;
import org.opencv.core.Core;
import org.opencv.imgcodecs.Imgcodecs;
import origami.Origami;
public class HelloCv {
    public static void main(String[] args) throws Exception {
        System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
        Mat mat = Imgcodecs.imread("./images/test.jpg",Imgcodecs.IMREAD_GRAYSCALE);  //灰度加載
        System.out.println(mat.width()+"x"+mat.height()+","+mat.type());
        Imgcodecs.imwrite("./images/output.jpg",mat);
    }
}

對於JPEG,可以使用CV_IMWRITE_JPEG_QUALITY參數,參數值范圍為0~100(值越大圖像質量越高)。默認值是95。

對於PNG,可以使用0~9作為壓縮程度的參數值,值越大表示圖像越小且壓縮時間越長。默認值是3。

可以通過使用另一個叫作MatOfInt的OpenCV對象來實現使用壓縮參數壓縮輸出文件,MatOfInt是一個整型矩陣,或者是一個更簡單的形式,即數組。

import org.opencv.core.CvType;
import org.opencv.core.Mat;
import org.opencv.core.Core;
import org.opencv.core.MatOfInt;
import org.opencv.imgcodecs.Imgcodecs;
import origami.Origami;
public class HelloCv {
    public static void main(String[] args) throws Exception {
        System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
        Mat mat = Imgcodecs.imread("./images/test.jpg",Imgcodecs.IMREAD_GRAYSCALE);
        System.out.println(mat.width()+"x"+mat.height()+","+mat.type());
        MatOfInt moi = new MatOfInt(Imgcodecs.IMWRITE_PNG_COMPRESSION,9);
        Imgcodecs.imwrite("./images/output.png",mat,moi);
    }
}

未壓縮前大小

壓縮後大小

到此這篇關於基於OpenCv與JVM實現加載保存圖像功能(JAVA 圖像處理)的文章就介紹到這瞭,更多相關java OpenCv加載保存圖像內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: