日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 前端技术 > javascript >内容正文

javascript

opencv第三方库JAVA接口,SpringBoot使用OpenCV示例总结

發(fā)布時(shí)間:2024/1/23 javascript 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 opencv第三方库JAVA接口,SpringBoot使用OpenCV示例总结 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

前言

最近有個(gè)項(xiàng)目需要對(duì)圖片圖像進(jìn)行處理,使用到了開(kāi)源框架OpenCV全稱(chēng)是Open Source Computer Vision Library,是一個(gè)跨平臺(tái)的計(jì)算機(jī)視覺(jué)庫(kù);而現(xiàn)在的項(xiàng)目都是基于SpringBoot,需要把OpenCv整合進(jìn)去,下面把在使用中遇到的問(wèn)題進(jìn)行一個(gè)匯總整理。

下載安裝

Opencv官網(wǎng)提供了一個(gè)多個(gè)平臺(tái)的版本包括:Windows,IOS,Android,地址如下:opencv.org/releases/;因?yàn)殚_(kāi)發(fā)在Windows平臺(tái),發(fā)布在Linux平臺(tái),所以我們這里至少需要兩個(gè)版本;

windows平臺(tái)

直接可以在官網(wǎng)下載opencv-3.4.10-vc14_vc15.exe安裝即可,安裝完會(huì)出現(xiàn)opencv文件夾在build\java目錄下有我們需要的opencv-3410.jar,x64/opencv_java3410.dll,x86/opencv_java3410.dll文件;

Linux平臺(tái)

Linux平臺(tái)需要我們手動(dòng)編譯,下載opencv-3.4.10.zip,解壓到/user/local目錄下,然后編譯安裝,執(zhí)行如下命令:

cd /usr/local/opencv-3.4.10

mkdir build

cd build

cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -DBUILD_TESTS=OFF ..

make -j8

sudo make install

安裝完之后可以在build/bin目錄下找到opencv-3410.jar,在build/lib目錄下找到libopencv_java3410.so

整合使用

兩個(gè)平臺(tái)分別安裝完之后,獲取了對(duì)應(yīng)的dll和so文件;兩個(gè)平臺(tái)獲取到的jar都是一樣的,隨便用哪個(gè)都可以,下面看看如何使用

外部引用方式

通過(guò)把應(yīng)用jar與本地庫(kù)文件進(jìn)行分隔開(kāi),然后在項(xiàng)目中進(jìn)行引用

相對(duì)路徑方式

可以通過(guò)System.loadLibrary來(lái)指定本地庫(kù)文件,但是這種方式需要在運(yùn)行時(shí)指定-Djava.library.path,具體可以提供配置類(lèi):

@Configuration

public class NativeConfig {

static {

System.loadLibrary(Core.NATIVE_LIBRARY_NAME);

}

}

運(yùn)行時(shí)需要在VM arguments中添加-Djava.library.path=對(duì)應(yīng)dll存放的路徑,不然會(huì)出現(xiàn)如下錯(cuò)誤:

Caused by: java.lang.UnsatisfiedLinkError: no opencv_java3410 in java.library.path

at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1860) ~[na:1.8.0_251]

at java.lang.Runtime.loadLibrary0(Runtime.java:870) ~[na:1.8.0_251]

at java.lang.System.loadLibrary(System.java:1122) ~[na:1.8.0_251]

at com.springboot.opencv.NativeConfig.(NativeConfig.java:10) ~[classes/:na]

絕對(duì)路徑方式

可以通過(guò)System.load來(lái)指定本地庫(kù)函數(shù)的絕對(duì)路徑:

@Configuration

public class NativeConfig {

static {

System.load("C:\\Users\\opencv\\build\\java\\x64\\opencv_java3410.dll");

}

}

踩坑1

在IDE中運(yùn)行使用Opencv功能的時(shí)候,出現(xiàn)如下錯(cuò)誤:

java.lang.UnsatisfiedLinkError: org.opencv.imgcodecs.Imgcodecs.imread_1(Ljava/lang/String;)J

at org.opencv.imgcodecs.Imgcodecs.imread_1(Native Method) ~[opencv-3.4.10.jar:unknown]

at org.opencv.imgcodecs.Imgcodecs.imread(Imgcodecs.java:332) ~[opencv-3.4.10.jar:unknown]

at com.springboot.opencv.OpenCVController.testOpenCV(OpenCVController.java:13) ~[classes/:na]

很明顯是在使用jar包里面的方法時(shí)沒(méi)有找到對(duì)應(yīng)的本地庫(kù)函數(shù),也就是說(shuō)loadLibrary沒(méi)有成功,但是之前其實(shí)在本地Java項(xiàng)目中是有進(jìn)行測(cè)試的,可以通過(guò)的,猜測(cè)是不是使用了什么工具導(dǎo)致加載失敗,最終鎖定在spring-boot-devtools工具包,提供了動(dòng)態(tài)加載等功能,直接移除此工具包,或者配置如下開(kāi)關(guān):

System.setProperty("spring.devtools.restart.enabled", "false");

內(nèi)部引用方式

為了更加簡(jiǎn)單部署,可以把本地庫(kù)文件和項(xiàng)目文件打成一個(gè)jar包,可以把本地庫(kù)文件放在resources目錄下,這樣可以打成一個(gè)jar包,現(xiàn)在的主要問(wèn)題就是如何加載jar包里面的本地庫(kù)文件,通過(guò)測(cè)試發(fā)現(xiàn)可以讀取到resources目錄下的庫(kù)文件,但是通過(guò)system.load并不能去加載成功,對(duì)應(yīng)的是一個(gè)類(lèi)似如下的路徑:

file:/C:/Users/Administrator.SKY-20170404CXG/Desktop/springboot-0.0.1-SNAPSHOT.j

ar!/BOOT-INF/classes!/opencv

最后采用的方式是把讀取的庫(kù)文件,存放到系統(tǒng)的一個(gè)臨時(shí)文件夾下,然后拿到庫(kù)文件的絕對(duì)路徑,這樣就可以通過(guò)system.load直接去加載,具體實(shí)現(xiàn)代碼可以參考Github

踩坑2

在執(zhí)行maven編譯打包的時(shí)候,發(fā)現(xiàn)本地庫(kù)文件(dll或者so文件)體積會(huì)變大,猜測(cè)maven在編譯的時(shí)候?qū)Ρ镜貛?kù)文件也進(jìn)行了編譯,具體如何禁用指定的文件格式編譯,而只需要拷貝即可:

org.apache.maven.plugins

maven-resources-plugin

UTF-8

dll,so

第三方Jar包

除了以上兩種需要我們自己去實(shí)現(xiàn)加載的方式,其實(shí)還可以直接使用第三方提供的jar包OpenPnp,里面包含了OpenCV.jar,對(duì)應(yīng)各個(gè)平臺(tái)的本地庫(kù),以及加載本地庫(kù)的封裝類(lèi);查看其源碼可以發(fā)現(xiàn),其實(shí)也是通過(guò)判斷當(dāng)前系統(tǒng),然后將對(duì)應(yīng)的本地庫(kù)文件拷貝到系統(tǒng)的臨時(shí)文件夾下,最后通過(guò)system.load去加載:

Files.createTempDirectory(`opencv_openpnp`);

因?yàn)榇税骖櫫怂衅脚_(tái),所以整個(gè)包有點(diǎn)大,一百多M,如果部署的系統(tǒng)確定,其實(shí)可以自己去加載指定庫(kù)文件就可以了,然后以相同的方式打成一個(gè)公共包供各個(gè)系統(tǒng)使用;

總結(jié)

本文雖然介紹的是在項(xiàng)目中使用OpenCV的一些總結(jié),但其實(shí)其他的本地庫(kù)也可以使用相同的方式;本文重點(diǎn)記錄一下在使用過(guò)程中遇到的那些坑,以及加載庫(kù)文件的方式。

到此這篇關(guān)于SpringBoot使用OpenCV示例總結(jié)的文章就介紹到這了,更多相關(guān)SpringBoot使用OpenCV內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)

總結(jié)

以上是生活随笔為你收集整理的opencv第三方库JAVA接口,SpringBoot使用OpenCV示例总结的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。