欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java中的Opencv簡介與開發(fā)環(huán)境部署方法

 更新時間:2025年01月19日 15:38:31   作者:獨立開發(fā)者格瑞  
OpenCV是一個開源的計算機視覺和圖像處理庫,提供了豐富的圖像處理算法和工具,它支持多種圖像處理和計算機視覺算法,可以用于物體識別與跟蹤、圖像分割與邊緣檢測、圖像特征提取與描述等應(yīng)用,本文介紹Java中的Opencv簡介與開發(fā)環(huán)境部署方法,感興趣的朋友一起看看吧

1.Opencv簡介

OpenCV ( Open Source Computer Vision Library )是一個廣泛應(yīng)用于計算機視覺和圖像處理領(lǐng)域的開源庫。它提供了豐富的圖像處理算法和工具,能夠處理圖像和視頻數(shù)據(jù),實現(xiàn)諸如特征提取、目標(biāo)檢測、圖像分割等功能。
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 特征分類器可以進行人臉檢測,通過訓(xùn)練分類器可以實現(xiàn)自定義物體的識別;而利用光流算法可以實現(xiàn)物體在連續(xù)幀中的跟蹤。
在交通監(jiān)控系統(tǒng)中,通過 OpenCV 實現(xiàn)車輛的檢測和跟蹤,可以實現(xiàn)交通流量統(tǒng)計、違規(guī)行為監(jiān)測等功能。通過使用 OpenCV 中的背景減法和運動檢測算法,可以提取出交通場景中的前景目標(biāo)(車輛),然后利用跟蹤算法跟蹤這些目標(biāo),實現(xiàn)車輛的檢測和跟蹤。

圖像分割與邊緣檢測:
圖像分割是將圖像分成若干個區(qū)域的過程,而邊緣檢測則是尋找圖像中的邊緣信息。 OpenCV 提供了多種圖像分割和邊緣檢測算法,例如基于閾值的分割、基于邊緣檢測算子的邊緣檢測等。
在醫(yī)學(xué)圖像處理中,通過 OpenCV 實現(xiàn)腫瘤的分割和邊緣檢測,可以幫助醫(yī)生進行腫瘤的診斷和治療。通過利用 OpenCV 中的圖像分割算法,可以將醫(yī)學(xué)圖像中的腫瘤區(qū)域提取出來;而邊緣檢測算法可以用于尋找腫瘤的邊緣信息,輔助醫(yī)生進行定量分析。

圖像特征提取與描述:

圖像特征提取與描述是計算機視覺中的重要任務(wù),它可以提取圖像中的關(guān)鍵信息,用于目標(biāo)識別、圖像匹配等應(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è)置:

導(dǎo)入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為解碼標(biāo)志,通常使用IMREAD_COLOR表示將圖像解碼為彩色圖像。
imdecode(Mat buf, int flags)

當(dāng)已經(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)文章

  • Spring Bean生命周期之Bean元信息的配置與解析階段詳解

    Spring Bean生命周期之Bean元信息的配置與解析階段詳解

    這篇文章主要為大家詳細介紹了Spring Bean生命周期之Bean元信息的配置與解析階段,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • Java交換map的key和value值的步驟和代碼示例

    Java交換map的key和value值的步驟和代碼示例

    在Java中,我們都知道直接交換Map的key和value是不被允許的,因為Map的接口設(shè)計是基于key-value對的,其中key是唯一的,并且是不可變的,所以本文給大家介紹了Java交換map的key和value值的步驟和代碼示例,需要的朋友可以參考下
    2024-09-09
  • 超詳細解釋Java反射

    超詳細解釋Java反射

    本文非常詳細的講解了java反射具體的內(nèi)容以及使用,java反射在現(xiàn)今的使用中很頻繁,希望此文可以幫大家解答疑惑,可以幫助大家理解
    2021-11-11
  • MyBatis傳入?yún)?shù)為List對象的實現(xiàn)

    MyBatis傳入?yún)?shù)為List對象的實現(xiàn)

    這篇文章主要介紹了MyBatis傳入?yún)?shù)為List對象的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • java volatile關(guān)鍵字作用及使用場景詳解

    java volatile關(guān)鍵字作用及使用場景詳解

    在本文里我們給大家分享的是關(guān)于java volatile關(guān)鍵字作用及使用場景的相關(guān)知識點內(nèi)容,需要的朋友們學(xué)習(xí)下。
    2019-08-08
  • java中jdk的下載和安裝全過程

    java中jdk的下載和安裝全過程

    這篇文章主要給大家介紹了關(guān)于java中jdk的下載和安裝的相關(guān)資料,文中通過圖文介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • SpringBoot integration實現(xiàn)分布式鎖的示例詳解

    SpringBoot integration實現(xiàn)分布式鎖的示例詳解

    常規(guī)項目都是采用Redission來實現(xiàn)分布式鎖,進行分布式系統(tǒng)中資源競爭加鎖操作,偶然發(fā)現(xiàn)SpringBoot中的integration也實現(xiàn)多種載體的分布式鎖控制,下面我們就來看看具體實現(xiàn)方法吧
    2023-12-12
  • Java數(shù)組看這篇就夠了

    Java數(shù)組看這篇就夠了

    這篇文章主要介紹了Java數(shù)組的詳細解釋,是Java入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下,希望能夠給你帶來幫助
    2021-09-09
  • 基于springboot創(chuàng)建mybatis的完整步驟

    基于springboot創(chuàng)建mybatis的完整步驟

    MyBatis是一款優(yōu)秀的數(shù)據(jù)庫持久層框架,相比Hibernate我更喜歡使用MyBatis,看的到SQL還是讓人更安心點,這篇文章主要給大家介紹了關(guān)于基于springboot創(chuàng)建mybatis的完整步驟,需要的朋友可以參考下
    2024-03-03
  • windows系統(tǒng)使用mvn命令打包并指定jdk路徑方式

    windows系統(tǒng)使用mvn命令打包并指定jdk路徑方式

    這篇文章主要介紹了windows系統(tǒng)使用mvn命令打包并指定jdk路徑方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-04-04

最新評論