Java中的Opencv簡介與開發(fā)環(huán)境部署方法
1.Opencv簡介
OpenCV ( Open Source Computer Vision Library )是一個廣泛應(yīng)用于計算機視覺和圖像處理領(lǐng)域的開源庫。它提供了豐富的圖像處理算法和工具,能夠處理圖像和視頻數(shù)據(jù),實現(xiàn)諸如特征提取、目標檢測、圖像分割等功能。
OpenCV 是由 Intel 公司于 1999 年開發(fā)的開源計算機視覺庫,旨在提供一套豐富的圖像處理和計算機視覺算法。它以 C / C ++語言編寫,支持多平臺(包括 Windows 、 Linux 、 macOS 等),并提供了 Python 、 Java 等編程語言的接口,方便開發(fā)者使用。
Opencv的應(yīng)用
我們能用Opencv做什么?
OpenCV 的應(yīng)用領(lǐng)域非常廣泛,下面介紹幾個常見的應(yīng)用領(lǐng)域:
物體識別與跟蹤:
OpenCV 提供了多種方法和算法來實現(xiàn)物體的檢測和跟蹤。例如,使用 Haar 特征分類器可以進行人臉檢測,通過訓練分類器可以實現(xiàn)自定義物體的識別;而利用光流算法可以實現(xiàn)物體在連續(xù)幀中的跟蹤。
在交通監(jiān)控系統(tǒng)中,通過 OpenCV 實現(xiàn)車輛的檢測和跟蹤,可以實現(xiàn)交通流量統(tǒng)計、違規(guī)行為監(jiān)測等功能。通過使用 OpenCV 中的背景減法和運動檢測算法,可以提取出交通場景中的前景目標(車輛),然后利用跟蹤算法跟蹤這些目標,實現(xiàn)車輛的檢測和跟蹤。
圖像分割與邊緣檢測:
圖像分割是將圖像分成若干個區(qū)域的過程,而邊緣檢測則是尋找圖像中的邊緣信息。 OpenCV 提供了多種圖像分割和邊緣檢測算法,例如基于閾值的分割、基于邊緣檢測算子的邊緣檢測等。
在醫(yī)學圖像處理中,通過 OpenCV 實現(xiàn)腫瘤的分割和邊緣檢測,可以幫助醫(yī)生進行腫瘤的診斷和治療。通過利用 OpenCV 中的圖像分割算法,可以將醫(yī)學圖像中的腫瘤區(qū)域提取出來;而邊緣檢測算法可以用于尋找腫瘤的邊緣信息,輔助醫(yī)生進行定量分析。
圖像特征提取與描述:
圖像特征提取與描述是計算機視覺中的重要任務(wù),它可以提取圖像中的關(guān)鍵信息,用于目標識別、圖像匹配等應(yīng)用。 OpenCV 提供了多種特征提取和描述算法,包括 Harris 角點檢測、 SIFT 、 SURF 等。
通過利用 OpenCV 中的特征點提取和匹配算法,可以將多張圖像拼接成一張全景圖像。通過提取每張圖像的特征點,然后進行特征點的匹配和變換,可以實現(xiàn)圖像的拼接和全景重建。這在旅游攝影、建筑拍攝等領(lǐng)域具有重要應(yīng)用。
2.Java使用OpenCV進行圖像操作
opencv安裝
我本地用的Opencv 4.5.1,可以到這里下載:
opencv451安裝包
到官下載Opencv:https://opencv.org/releases/
下載windows的exe包,雙擊安裝即可

java項目中集成Opencv
這里使用的是IDEA進行Opencv集成,主要是需要把Opencv的jar包引入項目的依賴庫,并且設(shè)置Opencv的運行環(huán)境。
使用快捷鍵 Ctrl+Shift+Alt+S打開項目設(shè)置:

導入Opencv的jar包到項目中,jar包在安裝目錄的build/java目錄下:


同時需要配置opencv的運行環(huán)境,需要將 安裝目錄/build/java/x64/opencv_java451.dll文件,復(fù)制到j(luò)ava運行環(huán)境jre的bin目錄下:

如果不進行運行環(huán)境設(shè)置的話,會報以下錯誤:

測試是否成功:
在java項目中,新建Demo類:
public class Demo {
// 調(diào)用OpenCV庫文件
static {
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
}
public static void main(String args[]) {
Mat img = Imgcodecs.imread("D://test.png")
}
}如果能正常運行無報錯,則說明已經(jīng)安裝成功了(注意圖片路徑在本地要有哦)
3.Opencv常用的API
讀取與輸出圖像
在OpenCV中,圖象輸入與輸出使用imread()、imwrite()兩個方法
Mat mat1 = Imgcodecs.imread("D://test.png"); //讀取磁盤的圖片
boolean imwrite = Imgcodecs.imwrite("D://test2.png", mat); //寫出磁盤的圖片下面是讀取和寫出的案例
public class Demo {
public static void main(String args[]) {
// 加載本地OpenCV庫
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
Mat mat = Imgcodecs.imread("D://test.png");
boolean imwrite = Imgcodecs.imwrite("D://test2.png", mat);
}
}顯示圖像
可以通過GUI的方式顯示圖片,不需要再將圖像通過流輸出到本地再來查看。
Mat mat = Imgcodecs.imread("D://test.png");
//顯示圖像
HighGui.imshow("原圖", mat);
//延時多長時間后顯示
HighGui.waitKey(0);圖像壓縮和解壓縮
OpenCV中的imencode方法和imdecode方法是用于圖像壓縮和解壓縮的函數(shù)。
壓縮:
將一張Mat對象壓縮并保存為JPEG格式的文件
public static void main(String args[]) throws IOException {
Mat mat = Imgcodecs.imread("D://test.png");
MatOfByte matOfByte = new MatOfByte();
Imgcodecs.imencode(".png", mat, matOfByte);
# Imgcodecs.imencode(".jpg", mat, matOfByte , new MatOfInt(Imgcodecs.IMWRITE_JPEG_QUALITY, 80));
Files.write(Paths.get("D://write.png"), matOfByte.toArray());
}方法說明
//ext表示編碼后的文件類型(例如".jpg"、".png"等) //img表示需要編碼的圖像 //buf表示存儲編碼結(jié)果的字節(jié)流 //params為可選參數(shù),表示編碼參數(shù)(例如JPEG的壓縮質(zhì)量) imencode(String ext, Mat img, MatOfByte buf, MatOfInt params);
解壓縮
//buf為需要解碼的圖像數(shù)據(jù)流 //flags為解碼標志,通常使用IMREAD_COLOR表示將圖像解碼為彩色圖像。 imdecode(Mat buf, int flags)
當已經(jīng)有了一個編碼后的JPEG格式圖像數(shù)據(jù)流,可以使用以下代碼將其解碼為OpenCV格式的圖像:
byte[] bytes = Files.readAllBytes(Paths.get("D://write.jpg"));
Mat matImage = Imgcodecs.imdecode(new MatOfByte(bytes), Imgcodecs.IMREAD_COLOR);到此這篇關(guān)于Java中的Opencv簡介與開發(fā)環(huán)境部署方法的文章就介紹到這了,更多相關(guān)java opencv開發(fā)環(huán)境部署內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringCloud修改OpenFeign的負載均衡算法的實現(xiàn)步驟
本文主要介紹了SpringCloud修改OpenFeign的負載均衡算法的實現(xiàn)步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2026-04-04
java使用MulticastSocket實現(xiàn)組播
這篇文章主要為大家詳細介紹了java使用MulticastSocket實現(xiàn)組播,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-01-01
Java編程Socket實現(xiàn)多個客戶端連接同一個服務(wù)端代碼
這篇文章主要介紹了Java編程Socket實現(xiàn)多個客戶端連接同一個服務(wù)端代碼,具有一定參考價值,需要的朋友可以了解下。2017-11-11
springboot整合shiro多驗證登錄功能的實現(xiàn)(賬號密碼登錄和使用手機驗證碼登錄)
這篇文章給大家介紹springboot整合shiro多驗證登錄功能的實現(xiàn)方法,包括賬號密碼登錄和使用手機驗證碼登錄功能,本文通過實例代碼給大家介紹的非常詳細,需要的朋友參考下吧2021-07-07

