Java (JDK 21) 調用 OpenCV (4.8.0)

Java 調用 OpenCV

  • 一.OpenCV 下載和安裝
  • 二.創建 Java Maven 項目
  • 三.其他測試

一.OpenCV 下載和安裝

Open CV 官網

可以下載編譯好的包,也可以下載源碼自行編譯

在這里插入圖片描述

雙擊安裝 opencv-4.8.0-windows.exe 默認為當前目錄

在這里插入圖片描述

安裝即解壓縮

在這里插入圖片描述

根據系統位數選擇

在這里插入圖片描述

將 x64 目錄下 opencv_java480.dll 放到 JDK 目錄

在這里插入圖片描述

將 opencv-480.jar 引入項目依賴

二.創建 Java Maven 項目

工程截圖

在這里插入圖片描述

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>org.example</groupId><artifactId>opencv</artifactId><version>1.0-SNAPSHOT</version><properties><maven.compiler.source>20</maven.compiler.source><maven.compiler.target>20</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencies><dependency><groupId>org.opencv</groupId><artifactId>opencv</artifactId><version>4.8.0</version><scope>system</scope><systemPath>${project.basedir}/src/main/resources/lib/opencv-480.jar</systemPath></dependency></dependencies></project>

測試代碼

package org.example;import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.core.Size;
import org.opencv.highgui.HighGui;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;/*** @author Administrator*/
public class Main {/*** load opencv_java480*/static {System.loadLibrary(Core.NATIVE_LIBRARY_NAME);}public static void main(String[] args) {String img = "C:\\Users\\Administrator\\Desktop\\IMG_20140207_165557.jpg";//read imageMat src = Imgcodecs.imread(img);//define a dst matMat dst = new Mat();// resizeImgproc.resize(src,dst,new Size(1600,900));//showHighGui.imshow("dst",dst);HighGui.resizeWindow("dst",1600,900);// show delay some ms auto closeHighGui.waitKey(1000);// exitSystem.exit(0);}
}

顯示效果

在這里插入圖片描述

三.其他測試

package org.example;import org.opencv.core.Core;
import org.opencv.core.CvType;
import org.opencv.core.Mat;
import org.opencv.core.Size;
import org.opencv.highgui.HighGui;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;/*** @author Administrator*/
public class Main {/*** load opencv_java480*/static {System.loadLibrary(Core.NATIVE_LIBRARY_NAME);}/*** 低通濾波器 均值濾波 使圖像模糊、消除噪點*/static float[] vague_shaper = new float[]{1/9,1/9,1/9,1/9,1/9,1/9,1/9,1/9,1/9};/*** 低通濾波器 高斯濾波 使圖像模糊*/static float[] gauss_shaper = new float[]{1/16,2/16,1/16,2/16,4/16,2/16,1/16,2/16,1/16};/*** 高通濾波器 銳化卷積核*/static float[] sharpening = new float[]{-1,-1,-1,-1,8,-1,-1,-1,-1};/*** 一階微算子 pre_witt 處理噪聲多、灰度突變的圖像*/static float[] pre_witt = new float[]{-1,-1,-1,0,0,0,1,1,1};/*** 一階微算子 sobel pre_witt 的改進版*/static float[] sobel_vertical = new float[]{-1,0,1,-2,0,2,-1,0,1};/*** 一階微算子 sobel pre_witt 的改進版*/static float[] sobel_horizontal = new float[]{1,2,1,0,0,0,-1,-2,-1};public static void main(String[] args) {String imgF = "C:\\Users\\Administrator\\Desktop\\IMG_20220204_132906.jpg";Mat img = Imgcodecs.imread(imgF);Mat src = new Mat();Mat dst = new Mat();//重置大小Imgproc.resize(img,src,new Size(1600,900));int rows = src.rows();int cols = src.cols();int channels = src.channels();//展示HighGui.resizeWindow("dst",1600,900);HighGui.imshow("dst",src);HighGui.waitKey(0);//灰度化Imgproc.cvtColor(src,dst,Imgproc.COLOR_RGB2GRAY);HighGui.imshow("dst",dst);HighGui.waitKey(0);//定義卷積核Mat operator = new Mat(3,3, CvType.CV_32FC1);//模糊operator.put(0,0,vague_shaper);Imgproc.filter2D(src,dst,-1,operator);HighGui.imshow("vague_shaper",dst);HighGui.waitKey(0);//模糊operator.put(0,0,gauss_shaper);Imgproc.filter2D(src,dst,-1,operator);HighGui.imshow("gauss_shaper",dst);HighGui.waitKey(0);//高通operator.put(0,0,sharpening);Imgproc.filter2D(src,dst,-1,operator);HighGui.imshow("sharpening",dst);HighGui.waitKey(0);//pre_wittoperator.put(0,0,pre_witt);Imgproc.filter2D(src,dst,-1,operator);HighGui.imshow("pre_witt",dst);HighGui.waitKey(0);//sobel_verticaloperator.put(0,0,sobel_vertical);Imgproc.filter2D(src,dst,-1,operator);HighGui.imshow("sobel_vertical",dst);HighGui.waitKey(0);//sobel_horizontaloperator.put(0,0,sobel_horizontal);Imgproc.filter2D(src,dst,-1,operator);HighGui.imshow("sobel_horizontal",dst);HighGui.waitKey(0);//二值化Mat gray = new Mat();Imgproc.cvtColor(src,gray,Imgproc.COLOR_RGB2GRAY);Imgproc.threshold(gray,dst,100,255,Imgproc.THRESH_BINARY);HighGui.imshow("binary",dst);HighGui.waitKey(0);//邊緣檢測Imgproc.Canny(src,dst,128,255);HighGui.imshow("edge",dst);HighGui.waitKey(0);//反色dst = src.clone();byte[] data = new byte[rows * cols * channels];dst.get(0,0,data);int index,r,g,b;for (int rs = 0 ; rs < rows ; rs++){//通道值橫向排列for (int c = 0 ; c < cols * channels ; c = c + channels){//取位置index = rs * cols * channels + c;//取RGB并翻轉b = 255 - data[index] & 0xff;g = 255 - data[index + 1] & 0xff;r = 255 - data[index + 2] & 0xff;//回寫data[index] = (byte) b;data[index + 1] = (byte) g;data[index + 2] = (byte) r;}}dst.put(0,0,data);HighGui.imshow("overturn",dst);HighGui.waitKey(0);System.exit(0);}}

原圖

在這里插入圖片描述

灰度圖

在這里插入圖片描述

銳化圖

在這里插入圖片描述

Prewitt 算子

在這里插入圖片描述

sobel_vertical

在這里插入圖片描述

sobel_horizontal

在這里插入圖片描述

binary

在這里插入圖片描述

邊緣檢測

在這里插入圖片描述

反色

在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/213364.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/213364.shtml
英文地址,請注明出處:http://en.pswp.cn/news/213364.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

外匯交易到哪開戶?外匯開戶所需流程有哪些?

外匯交易是一種全球性的金融市場活動&#xff0c;參與者可以通過買入或賣出不同國家的貨幣來獲取利潤。在進行外匯交易之前&#xff0c;開設一個外匯交易賬戶是必要的。本文將介紹外匯交易開戶的重要性、選擇外匯交易平臺的因素以及開戶所需的基本流程&#xff0c;幫助讀者更好…

開往渤海的列車:滄港鐵路如何扮演產業帶城市生態共贏的關鍵先生

新時代構建新格局&#xff0c;新格局呼喚新作為。在交通強國戰略背景下&#xff0c;鐵路運輸企業需要如何彰顯“鐵擔當”&#xff1f; 逢山開路、遇水架橋&#xff0c;身處重要地理區位&#xff0c;滄州滄港鐵路有限公司&#xff08;以下簡稱“滄港鐵路”&#xff09;不斷搶抓…

并查集帶壓縮路徑的find

目錄 原因&#xff1a; 優化&#xff1a; 原因&#xff1a; 當路徑比較特殊&#xff0c;如圖&#xff1a; 非常深&#xff0c;最底層進行find時&#xff0c;循環找根&#xff08;或者遞歸找&#xff09;&#xff0c;消耗就比較大。 我們可以進行優化。 優化&#xff1a; &…

【C++】C++異常語法、使用、規范、異常安全及異常的優缺點

1. C異常概念 異常是一種處理錯誤的方式&#xff0c;當一個函數發現自己無法處理的錯誤時就可以拋出異常&#xff0c;讓函數的直接或間接的調用者處理這個錯誤。 throw: 當問題出現時&#xff0c;程序會拋出一個異常。這是通過使用 throw 關鍵字來完成的。catch: 在您想要處理…

給你的Python程序添點Emoji魔法:使用Emoji模塊增添趣味和個性!

當你想給你的Python程序增添一些趣味和個性時&#xff0c;Emoji模塊是一個很有用的工具。Emoji模塊允許你在Python中使用各種表情符號&#xff0c;從笑臉到動物&#xff0c;甚至是食物和天氣等。在本篇博客中&#xff0c;我們將介紹如何在Python中使用Emoji模塊&#xff0c;并展…

【小白專用】使用PHP創建和操作MySQL數據庫,數據表

php數據庫操作 php連接mysql數據庫 <?php $hostlocalhost; // 數據庫主機名 $username"root"; // 數據庫用戶名 $password"al6"; // 數據庫密碼 $dbname"mysql"; // 數據庫名 $connIDmysqli_connect($host,$username,$password,$dbn…

adb push報錯:remote couldn‘t create file: Is a directory

adb push報錯&#xff1a;remote couldn‘t create file: Is a directory 出現這個問題可能是電腦本地目錄中包含中文或者是目錄地址中多包含了一個/ 比如說以下兩種路徑 1. test/測試音頻文件1/a.mp3 2.test/test_audio/ 這兩種都是不可以的&#xff08;我是在as中執行的…

MQTT服務質量-QoS

QoS是消息發送方和接收方之間的協議&#xff0c;定義了指定消息發送保證等級。本文將深入探究MQTT中不同的QoS等級。 QoS是什么 MQTT提供三個QoS等級&#xff1a; 最多一次&#xff08;QoS 0&#xff09;至少一次&#xff08;QoS 1&#xff09;確切一次&#xff08;QoS 2&am…

科技提升安全,基于YOLOv5系列模型【n/s/m/l/x】開發構建商超扶梯場景下行人安全行為姿態檢測識別系統

在商超等人流量較為密集的場景下經常會報道出現一些行人在扶梯上摔倒、受傷等問題&#xff0c;隨著AI技術的快速發展與不斷普及&#xff0c;越來越多的商超、地鐵等場景開始加裝專用的安全檢測預警系統&#xff0c;核心工作原理即使AI模型與攝像頭圖像視頻流的實時計算&#xf…

2024年JAVA招聘行情如何?

大家都在說Java求職不好找&#xff0c;是真的嗎&#xff1f;我們來看看數據。 數據支持&#xff1a;根據TIOBE 5月份的編程語言排行榜&#xff0c;Java仍然是前三名之一。這意味著&#xff0c;Java在開發領域仍然占據重要地位。 而在中國的IT市場中&#xff0c;Java仍然是主要…

使用alpine鏡像部署go應用時踩的坑

使用alpine鏡像部署go應用時踩的坑 關于交叉編譯 實際上我在ubuntu的交叉編譯出來的exe并不能在alpine上運行&#xff0c;這邊采取拉鏡像編譯復制出來的做法&#xff0c;部署再用干凈的alpine 拉取golang:alpine踩坑 在Dockerhub上可以找到&#xff1a; 然而拉取的alpine中…

在普通的項目中創建web的功能

新增web功能: 1.創建一個新項目&#xff0c;不勾選模板&#xff1a;2.添加web功能&#xff1a; 1.創建一個新項目&#xff0c;不勾選模板&#xff1a; 發現普通項目沒有webapp文件夾&#xff0c;即沒有web的功能。 2.添加web功能&#xff1a; Add framework support:添加一些…

VHDL數碼管顯示控制器設計

題目要求&#xff1a; 初始狀態&#xff0c;開關 K1 為低電平&#xff0c;6 個數碼管上依次顯示 1-6。當 K1 變為高電平時&#xff0c;數據管顯示內容依次循環左移&#xff0c;當 K1 變為低電平時&#xff0c;保持當前顯示內容。 參考資料&#xff1a;使用VHDL實現動態掃描八位…

luceda ipkiss教程 45:在版圖上加LOGO

**在設計版圖時往往需要加上公司或者學校的LOGO,只需要LOGO的圖片&#xff0c;通過代碼就可以將LOGO加到版圖上&#xff0c;比如&#xff1a; ** 通過代碼可以得到版圖上的LOGO: ! 代碼如下&#xff1a; from si_fab import all as pdk from ipkiss3 import all as i3i3.TECH…

國際驗證碼有哪些具體的應用場景?

用戶注冊 在許多網站和應用程序中&#xff0c;用戶注冊是必要的第一步。通過使用驗證碼接口&#xff0c;可以防止惡意機器人或自動化程序大規模注冊賬號&#xff0c;從而保護網站或應用程序的安全性和可靠性。 密碼重置 當用戶忘記密碼或需要重置密碼時&#xff0c;驗證碼可…

MyBatis逆向工程

正向工程&#xff1a;先創建Java實體類&#xff0c;由框架負責根據實體類生成數據庫表。Hibernate是支持正向工程的。逆向工程&#xff1a;先創建數據庫表&#xff0c;由框架負責根據數據庫表&#xff0c;反向生成如下資源&#xff1a; Java實體類Mapper接口Mapper映射文件 1…

apply call bind三者區別區別

apply call bind三者區別區別 三者的相同點&#xff1a;都是用來改變this的指向 call()和apply()的區別&#xff1a; 相同點&#xff1a;都是調用一個對象的一個方法&#xff0c;用另一個對象替換當前對象&#xff08;功能相同&#xff09; B.call(A, args1,args2);即A對象調用…

docker的基本管理和概念

docker是什么&#xff1f; docker是開源的應用容器引擎。基于go語言開發的。運行在Linux系統中的開源的輕量級的“虛擬機”。 docker的容器技術可以在一臺主機上輕松的為任何應用創建一個輕量級的、可移植的、自給自足的容器 docker的宿主機是linux系統。集裝箱可以理解為相互…

CAN總線協議編程實例

1. can.h #ifndef __CAN_H #define __CAN_H#include "./SYSTEM/sys/sys.h"/******************************************************************************************/ /* CAN 引腳 定義 */#define CAN_RX_GPIO_PORT GPIOA #define CAN_RX_GPI…

R2RNet: Low-light Image Enhancement viaReal-low to Real-normal Network

本研究針對在弱光條件下拍攝的圖像可能嚴重降低圖像質量的問題進行了探索。解決一系列低光圖像的退化可以有效提高圖像的視覺質量和高級視覺任務的性能。在本研究中&#xff0c;我們提出了一種新穎的基于Retinex的真實低光到真實正常光網絡&#xff08;R2RNet&#xff09;&…