在Java中使用OpenCV實(shí)踐
前言
最近工作上有個(gè)項(xiàng)目,涉及到一些有關(guān)圖像的操作,正好得知有OpenCV這一個(gè)開(kāi)源庫(kù)。
在網(wǎng)上查找了一些資料,發(fā)現(xiàn)OpenCV有很多妙用,例如人臉識(shí)別、車牌識(shí)別等,甚至有大佬能用它來(lái)做自動(dòng)駕駛。感覺(jué)挺有意思的,小記一下。
一 、OpenCV
1.簡(jiǎn)介
OpenCV (開(kāi)源計(jì)算機(jī)視覺(jué)庫(kù)) 是一個(gè)開(kāi)源的BSD許可庫(kù),其中包含數(shù)百種計(jì)算機(jī)視覺(jué)算法。它為開(kāi)發(fā)者提供了Java、C++和Python接口,支持Windows、Linux和Android。
OpenCV被廣泛應(yīng)用于各種領(lǐng)域,例如安防監(jiān)控、智能駕駛、機(jī)器人視覺(jué)、虛擬現(xiàn)實(shí)等。
官網(wǎng)文檔地址:OpenCV: OpenCV Tutorials
參考教程:OpenCV官方文檔_w3cschool
2.下載與安裝
下載地址:Releases - OpenCV
根據(jù)自己需要,選擇版本以及對(duì)應(yīng)的平臺(tái),這里版本選4.10.0,平臺(tái)選Windows。

下載后是一個(gè)exe,雙擊安裝即可。

3.目錄說(shuō)明
安裝完成后的目錄如下:

build為構(gòu)建后的文件,sources是OpenCV的源代碼,我們進(jìn)入build:

因?yàn)槲覀兪莏ava開(kāi)發(fā),所以進(jìn)入java文件夾,其中有個(gè)opencv-4100.jar,這個(gè)是我們開(kāi)發(fā)中需要用到的jar包。
x64與x86代表不同的系統(tǒng),我們是在x64系統(tǒng)中使用,所以選擇x64,打開(kāi)文件夾后里面有一個(gè)dll文件,這也是我們開(kāi)發(fā)中需要調(diào)用的庫(kù)文件。


二、在Java項(xiàng)目中使用
我使用的開(kāi)發(fā)軟件是 IntelliJ IDEA,因此這里將展示在IDEA中集成OpenCV。
1.打開(kāi)或新建一個(gè)項(xiàng)目
2.使用快捷鍵 Shift + Ctrl + Alt + S 打開(kāi)項(xiàng)目設(shè)置,或鼠標(biāo)右擊項(xiàng)目,選擇 “打開(kāi)項(xiàng)目設(shè)置”

3.選擇 “模塊” → 選中項(xiàng)目 → “依賴” → “+(添加)” → “1.JAR或目錄...” → 找到下載的OpenCV-4100.jar → "確定"

4.找到剛剛添加進(jìn)來(lái)的jar包,"右建" → "編輯" → "+(添加)" → 找到下載的opencv_java4100.dll → "確定"


以上步驟完成后,就可以開(kāi)始編碼了。
需要注意的是,如果maven依賴有變更,OpenCV需要重新導(dǎo)入,目前我還沒(méi)發(fā)現(xiàn)解決方法,若有大佬能解決這個(gè)問(wèn)題,懇請(qǐng)告知,小弟不勝感激!
三 、測(cè)試
1.測(cè)試代碼
這里運(yùn)行一個(gè)生成灰度圖的測(cè)試代碼,測(cè)試是否成功導(dǎo)入OpenCV。
package org.example;
import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;
public class OpenCV_test {
public static void main(String[] args) {
//加載 opencv_javaXX.dll
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
//測(cè)試圖片地址
String imgPath = "path/path/xxxx.jpg";
//讀取圖片
Mat img = Imgcodecs.imread(imgPath);
//生成灰度圖
Mat gray = new Mat();
Imgproc.cvtColor(img,gray, Imgproc.COLOR_BGR2GRAY);
//保存圖片
Imgcodecs.imwrite("./result.png", gray);
}
}
2.測(cè)試結(jié)果

灰度圖

原圖
總結(jié)
至此,Java項(xiàng)目已成功導(dǎo)入OpenCV,聽(tīng)說(shuō)OpenCV還能結(jié)合AI模型一起使用,應(yīng)該挺好玩的,后面有時(shí)間的話我也會(huì)去研究研究,玩一玩。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
SpringCloud FeignClient 超時(shí)設(shè)置
FeignClient?默認(rèn)的超時(shí)時(shí)間可能不滿足你的需求,你可以通過(guò)幾種方式來(lái)自定義這些超時(shí)設(shè)置,具有一定的參考價(jià)值,感興趣的可以了解一下2024-08-08
Springcloud+Mybatis使用多數(shù)據(jù)源的四種方式(小結(jié))
這篇文章主要介紹了Springcloud+Mybatis使用多數(shù)據(jù)源的四種方式,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09
springboot依靠security實(shí)現(xiàn)digest認(rèn)證的實(shí)踐
HTTP摘要認(rèn)證通過(guò)加密參數(shù)(如nonce、response)驗(yàn)證身份,避免明文傳輸,但存在密碼存儲(chǔ)風(fēng)險(xiǎn),相比基本認(rèn)證更安全,卻因?qū)崿F(xiàn)復(fù)雜且不支持Remember-me,未被廣泛采用,測(cè)試案例顯示其工作流程2025-09-09
java連接數(shù)據(jù)庫(kù)知識(shí)點(diǎn)總結(jié)以及操作應(yīng)用
這篇文章主要給大家介紹了關(guān)于java連接數(shù)據(jù)庫(kù)知識(shí)點(diǎn)總結(jié)以及操作應(yīng)用的相關(guān)資料, 當(dāng)涉及到Java中數(shù)據(jù)庫(kù)數(shù)據(jù)處理時(shí),我們可以利用強(qiáng)大的Java數(shù)據(jù)庫(kù)連接技術(shù)與各種數(shù)據(jù)庫(kù)進(jìn)行交互,需要的朋友可以參考下2023-12-12
springboot docker jenkins 自動(dòng)化部署并上傳鏡像的步驟詳解
這篇文章主要介紹了springboot docker jenkins 自動(dòng)化部署并上傳鏡像的相關(guān)資料,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-05-05
一文詳解Java如何系統(tǒng)地避免空指針問(wèn)題
新手Java開(kāi)發(fā)總是經(jīng)??罩羔槞z查,甚至某些老手也會(huì)犯這樣的問(wèn)題,所以這篇文章小編就帶大家一起來(lái)看看如何系統(tǒng)地避免空指針問(wèn)題,希望對(duì)大家有所幫助2024-01-01
Java編寫(xiě)日志手機(jī)號(hào)脫敏工具類
在開(kāi)發(fā)過(guò)程中,很容易將用戶敏感信息,例如手機(jī)號(hào)碼、身份證等,打印在日志平臺(tái),本文將利用Java編寫(xiě)一個(gè)日志手機(jī)號(hào)脫敏工具類,感興趣的可以了解下2024-12-12

