亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

1.Opencv簡(jiǎn)介

OpenCV ( Open Source Computer Vision Library )是一個(gè)廣泛應(yīng)用于計(jì)算機(jī)視覺(jué)和圖像處理領(lǐng)域的開(kāi)源庫(kù)。它提供了豐富的圖像處理算法和工具,能夠處理圖像和視頻數(shù)據(jù),實(shí)現(xiàn)諸如特征提取、目標(biāo)檢測(cè)、圖像分割等功能。
OpenCV 是由 Intel 公司于 1999 年開(kāi)發(fā)的開(kāi)源計(jì)算機(jī)視覺(jué)庫(kù),旨在提供一套豐富的圖像處理和計(jì)算機(jī)視覺(jué)算法。它以 C / C ++語(yǔ)言編寫(xiě),支持多平臺(tái)(包括 Windows 、 Linux 、 macOS 等),并提供了 Python 、 Java 等編程語(yǔ)言的接口,方便開(kāi)發(fā)者使用。

Opencv的應(yīng)用

我們能用Opencv做什么?

OpenCV 的應(yīng)用領(lǐng)域非常廣泛,下面介紹幾個(gè)常見(jiàn)的應(yīng)用領(lǐng)域:

物體識(shí)別與跟蹤:
OpenCV 提供了多種方法和算法來(lái)實(shí)現(xiàn)物體的檢測(cè)和跟蹤。例如,使用 Haar 特征分類器可以進(jìn)行人臉檢測(cè),通過(guò)訓(xùn)練分類器可以實(shí)現(xiàn)自定義物體的識(shí)別;而利用光流算法可以實(shí)現(xiàn)物體在連續(xù)幀中的跟蹤。
在交通監(jiān)控系統(tǒng)中,通過(guò) OpenCV 實(shí)現(xiàn)車輛的檢測(cè)和跟蹤,可以實(shí)現(xiàn)交通流量統(tǒng)計(jì)、違規(guī)行為監(jiān)測(cè)等功能。通過(guò)使用 OpenCV 中的背景減法和運(yùn)動(dòng)檢測(cè)算法,可以提取出交通場(chǎng)景中的前景目標(biāo)(車輛),然后利用跟蹤算法跟蹤這些目標(biāo),實(shí)現(xiàn)車輛的檢測(cè)和跟蹤。

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

圖像特征提取與描述:

圖像特征提取與描述是計(jì)算機(jī)視覺(jué)中的重要任務(wù),它可以提取圖像中的關(guān)鍵信息,用于目標(biāo)識(shí)別、圖像匹配等應(yīng)用。 OpenCV 提供了多種特征提取和描述算法,包括 Harris 角點(diǎn)檢測(cè)、 SIFT 、 SURF 等。
通過(guò)利用 OpenCV 中的特征點(diǎn)提取和匹配算法,可以將多張圖像拼接成一張全景圖像。通過(guò)提取每張圖像的特征點(diǎn),然后進(jìn)行特征點(diǎn)的匹配和變換,可以實(shí)現(xiàn)圖像的拼接和全景重建。這在旅游攝影、建筑拍攝等領(lǐng)域具有重要應(yīng)用。

2.Java使用OpenCV進(jìn)行圖像操作

opencv安裝

我本地用的Opencv 4.5.1,可以到這里下載:
opencv451安裝包

到官下載Opencv:https://opencv.org/releases/

下載windows的exe包,雙擊安裝即可

java項(xiàng)目中集成Opencv

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

導(dǎo)入Opencv的jar包到項(xiàng)目中,jar包在安裝目錄的build/java目錄下:

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

如果不進(jìn)行運(yùn)行環(huán)境設(shè)置的話,會(huì)報(bào)以下錯(cuò)誤:

測(cè)試是否成功:
在java項(xiàng)目中,新建Demo類:

public class Demo {
    // 調(diào)用OpenCV庫(kù)文件
    static {
        System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
    }
    public static void main(String args[]) {
        Mat img = Imgcodecs.imread("D://test.png")
    }
}

如果能正常運(yùn)行無(wú)報(bào)錯(cuò),則說(shuō)明已經(jīng)安裝成功了(注意圖片路徑在本地要有哦)

3.Opencv常用的API

讀取與輸出圖像

在OpenCV中,圖象輸入與輸出使用imread()、imwrite()兩個(gè)方法

Mat mat1 = Imgcodecs.imread("D://test.png"); //讀取磁盤(pán)的圖片
boolean imwrite = Imgcodecs.imwrite("D://test2.png", mat); //寫(xiě)出磁盤(pán)的圖片

下面是讀取和寫(xiě)出的案例

public class Demo {
	 public static void main(String args[]) {
	        // 加載本地OpenCV庫(kù)
	        System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
	        Mat mat = Imgcodecs.imread("D://test.png");
	        boolean imwrite = Imgcodecs.imwrite("D://test2.png", mat);
	    }
    }

顯示圖像
可以通過(guò)GUI的方式顯示圖片,不需要再將圖像通過(guò)流輸出到本地再來(lái)查看。

Mat mat = Imgcodecs.imread("D://test.png");
//顯示圖像
HighGui.imshow("原圖", mat);
//延時(shí)多長(zhǎng)時(shí)間后顯示
HighGui.waitKey(0);

圖像壓縮和解壓縮
OpenCV中的imencode方法和imdecode方法是用于圖像壓縮和解壓縮的函數(shù)。
壓縮:
將一張Mat對(duì)象壓縮并保存為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());
    }

方法說(shuō)明

//ext表示編碼后的文件類型(例如".jpg"、".png"等)
//img表示需要編碼的圖像
//buf表示存儲(chǔ)編碼結(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)有了一個(gè)編碼后的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簡(jiǎn)介與開(kāi)發(fā)環(huán)境部署方法的文章就介紹到這了,更多相關(guān)java opencv開(kāi)發(fā)環(huán)境部署內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

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

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

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

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

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

    超詳細(xì)解釋Java反射

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

    MyBatis傳入?yún)?shù)為L(zhǎng)ist對(duì)象的實(shí)現(xiàn)

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

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

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

    java中jdk的下載和安裝全過(guò)程

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

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

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

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

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

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

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

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

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

最新評(píng)論