基于OpenCv與JVM實(shí)現(xiàn)加載保存圖像功能(JAVA?圖像處理)
加載圖片
openCv有一個(gè)名imread的簡(jiǎn)單函數(shù),用于從文件中讀取圖像
imread 函數(shù)位于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()); ??? } }
加載成功會(huì)輸出以下消息
這個(gè)函數(shù)也可以加載灰度圖像
通過(guò)IMREAD_GRAYSCALE進(jìn)行控制
Mat mat = Imgcodecs.imread("./images/test.jpg",Imgcodecs.IMREAD_GRAYSCALE);
IMREAD_GRAYSCALE將圖像強(qiáng)制轉(zhuǎn)換為灰度圖像并加載到Mat對(duì)象中
除了IMREAD_GRAYSCALE參數(shù)外,還可以傳遞其他參數(shù)得到特定的處理通道和圖像深度
保存圖片
imwrite函數(shù)可以用來(lái)保存圖片,也是 Imgcodecs類中
我們的圖片是彩色的,通過(guò)IMREAD_GRAYSCALE改變?yōu)榛叶葓D片,并以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); ??? } }
對(duì)于JPEG,可以使用CV_IMWRITE_JPEG_QUALITY參數(shù),參數(shù)值范圍為0~100(值越大圖像質(zhì)量越高)。默認(rèn)值是95。
對(duì)于PNG,可以使用0~9作為壓縮程度的參數(shù)值,值越大表示圖像越小且壓縮時(shí)間越長(zhǎng)。默認(rèn)值是3。
可以通過(guò)使用另一個(gè)叫作MatOfInt的OpenCV對(duì)象來(lái)實(shí)現(xiàn)使用壓縮參數(shù)壓縮輸出文件,MatOfInt是一個(gè)整型矩陣,或者是一個(gè)更簡(jiǎn)單的形式,即數(shù)組。
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); } }
未壓縮前大小
壓縮后大小
到此這篇關(guān)于基于OpenCv與JVM實(shí)現(xiàn)加載保存圖像功能(JAVA 圖像處理)的文章就介紹到這了,更多相關(guān)java OpenCv加載保存圖像內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
解決IDEA修改 .vmoptions 文件后導(dǎo)致無(wú)法啟動(dòng)的問(wèn)題
這篇文章主要介紹了解決IDEA修改 .vmoptions 文件后導(dǎo)致無(wú)法啟動(dòng)的問(wèn)題,需要的朋友可以參考下2020-12-12Java?Bean轉(zhuǎn)Map的那些踩坑實(shí)戰(zhàn)
項(xiàng)目中有時(shí)會(huì)遇到Map轉(zhuǎn)Bean,Bean轉(zhuǎn)Map的情況,下面這篇文章主要給大家介紹了關(guān)于Java?Bean轉(zhuǎn)Map那些踩坑的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-07-07netty對(duì)proxy protocol代理協(xié)議的支持詳解
這篇文章主要為大家介紹了netty對(duì)proxy protoco代理協(xié)議的支持詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-07-07SpringBoot多controller添加URL前綴的實(shí)現(xiàn)方法
這篇文章主要介紹了SpringBoot多controller添加URL前綴的方法,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-02-02SpringBoot整合MybatisPlus實(shí)現(xiàn)增刪改查功能
MybatisPlus是國(guó)產(chǎn)的第三方插件,?它封裝了許多常用的CURDapi,免去了我們寫mapper.xml的重復(fù)勞動(dòng)。本文將整合MybatisPlus實(shí)現(xiàn)增刪改查功能,感興趣的可以了解一下2022-05-05Java多線程開發(fā)工具之CompletableFuture的應(yīng)用詳解
做Java編程,難免會(huì)遇到多線程的開發(fā),但是JDK8這個(gè)CompletableFuture類很多開發(fā)者目前還沒聽說(shuō)過(guò),但是這個(gè)類實(shí)在是太好用了,本文就來(lái)聊聊它的應(yīng)用吧2023-03-03spring boot中controller的使用及url參數(shù)的獲取方法
這篇文章主要介紹了spring boot中controller的使用及url參數(shù)的獲取方法,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2018-01-01