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

边缘检测

反色

相关文章:
Java (JDK 21) 调用 OpenCV (4.8.0)
Java 调用 OpenCV 一.OpenCV 下载和安装二.创建 Java Maven 项目三.其他测试 一.OpenCV 下载和安装 Open CV 官网 可以下载编译好的包,也可以下载源码自行编译 双击安装 opencv-4.8.0-windows.exe 默认为当前目录 安装即解压缩 根据系统位数选择 将 x64 目录下 op…...
git 常用的使用方法
1.查看分支 $ git branch #查看本地分支 $ git branch -r #查看远程分支 $ git branch -a #查看所有分支 $ git branch -vv #查看本地分支及追踪的分支 2.创建分支 方法1 $ git branch 分支名 #创建本地分支 #将本地分支push,就创建了远程分支方法2 #创建本地分…...
使用Caliper对Fabric地basic链码进行性能测试
如果你需要对fabric网络中地合约进行吞吐量、延迟等性能进行评估,可以使用Caliper来实现,会返回给你一份网页版的直观测试报告。下面是对test-network网络地basic链码地测试过程。 目录 1. 建立caliper-workspace文件夹2. 安装npm等3. calipe安装4. 创建…...
一台是阿里云,一台是腾讯云,一台是华为云,一台是百度云等多种公有云混合安装K8S集群
1. 修改主机名称和添加hosts #永久修改主机名 hostnamectl set-hostname master && bash #在master01上操作,阿里云服务器 hostnamectl set-hostname worker1 && bash #在node01上操作,阿里腾讯云服务器 hostnamectl set-ho…...
期末速成数据库极简版【查询】(3)
目录 多表查询 【8】多表连接——内连接 🙂等值连接 🙂自然连接 🙂非等值连接 【9】多表连接——外连接 【10】交叉连接不考 【11】联合查询 【12】扩展多表连接 【13】嵌套查询 🙂 多表查询 【8】多表连接——内连…...
人工智能_机器学习061_KKT条件公式理解_原理深度解析_松弛变量_不等式约束---人工智能工作笔记0101
然后我们再来看,前面我们,拉格朗日乘子法,把带有条件的,问题,优化成了等式问题,从而, 构建拉格朗日乘子公式,进行实现了求解,但是在现实生活中,往往也有,很多不等式问题. 比如上面的这个,就是要求是h(x)<=0的情况下,函数f(x)的最小值. 可以看到,这个带有一个不等式的条件,…...
有关光伏电站绝缘阻抗异常排查分析-安科瑞 蒋静
近几年,光伏发电技术迅猛发展,光伏扶贫电站及分布式光伏使光伏发电走进千家万户。然而光伏发电设备运行期间仍存在隐患。及时发现并解决*常见异常运行故障,可以很大地提高光伏发电设备可利用率,是保证光伏发电设备正常运行、满足收…...
抓取真实浏览器设备指纹fingerprint写入cookie方案
一个关于抓取真实浏览器设备指纹写入cookie方案,用户访问页面获取到用户设备生成指纹id,通过js把指纹存入cookie,然后用php进行获取cookie存的指纹值到后台。 用途:追踪用户设备,防恶意注册,防恶意采集 浏…...
【华为OD题库-074】VLAN资源池-Java
题目 VLAN是一种对局域网设备进行逻辑划分的技术,为了标识不同的VLAN,引入VLAN ID(1-4094之间的整数)的概念。定义一个VLAN ID的资源池(下称VLAN资源池),资源池中连续的VLAN用开始VLAN-结束VLAN表示,不连续的用单个整数表示&#…...
成都工业学院Web技术基础(WEB)实验一:HTML5排版标签使用
写在前面 1、基于2022级计算机大类实验指导书 2、代码仅提供参考,前端变化比较大,按照要求,只能做到像,不能做到一模一样 3、图片和文字仅为示例,需要自行替换 4、如果代码不满足你的要求,请寻求其他的…...
OpenAI承认ChatGPT变懒惰,正在修复该问题
OpenAI旗下的官方ChatGPT账号在社交平台表示,已经收到了大量用户关于GPT-4变懒惰的反馈。 这是因为自11月11日以来,OpenAI就没有更新过该模型。当然这不是故意的,大模型的行为是不可预测的,正在研究修复该问题。 外界猜测&#x…...
归并排序与自然归并排序
归并排序 归并排序(merge - sort)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法的一个非常典型的应用.将已有的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序.若将两个有序表合并成一个有序表,成为二路归并. 核心步骤讲解 归并排序的…...
22款奔驰GLS450升级HUD抬头显示 告别低头
随着科技飞速地发展,从汽车领域就可以看出,尤其是汽车的抬头显示器,一经推出就吸引了很多的车主。星骏汇小许Xjh15863 升级HUD抬头显示,HUD与汽车系统进行完整的数据信息连接,整合成大数据,然后将一些重要信…...
关于kotlin的属性委托,报错的,实际原因剖析
报错:Property delegate must have a ‘getValue(SecurityCheckView, KProperty*>)’ method. None of the following functions are suitable 解决方案:就是在根目录的build.gradle中改变 kotlin的插件版本 classpath “org.jetbrains.kotlin:kotli…...
HarmonyOS4.0从零开始的开发教程11给您的应用添加弹窗
HarmonyOS(十)给您的应用添加弹窗 概述 在我们日常使用应用的时候,可能会进行一些敏感的操作,比如删除联系人,这时候我们给应用添加弹窗来提示用户是否需要执行该操作,如下图所示: 弹窗是一种…...
js 同步任务和异步任务
同步任务和异步任务 同步任务 同步任务就是没有被引擎挂起、在主线程上排队执行的任务。只有前一个任务执行完,才会执行下一个任务。同步任务具有堵塞效果。 异步任务 异步任务是被引擎放在一边,不进入主线程进入任务队列的任务。只有引擎认为某个异步任…...
【小白专用】Sql Server 连接Mysql 更新23.12.09
目标 已知mysql连接参数(地址和用户),期望通过Microsoft Sql Server Management Studio (以下简称MSSSMS)连接Mysql,在MSSSMS中直接查询或修改Mysql中的数据。 一般是选最新的版本下载。 选64位还是32位&a…...
DIP——边缘提取与分割
1.使用canny算法进行边缘提取 本实验比较简单,基本思路是对原图像进行一个高斯模糊处理,用于去噪,之后转换为灰度图,直接调用cv库中的canny记性边缘提取。若想直接得到彩色边缘,则通过按位与操作,将原始彩色…...
低代码开发:现实挑战与发展前景
低代码开发是近年来迅速崛起的软件开发方法,让编写应用程序变得更快、更简单。有人说它是美味的膳食,让开发过程高效而满足,但也有人质疑它是垃圾食品,缺乏定制性与深度。 一、什么是低代码 低代码开发是一种基于图形用户界面&…...
大数据技术7:基于StarRocks统一OALP实时数仓
前言: 大家对StarRocks 的了解可能不及 ClickHouse或者是远不及 ClickHouse 。但是大家可能听说过 Doris ,而 StarRocks 实际上原名叫做 Doris DB ,他相当于是一个加强版的也就是一个 Doris ,也就是说 Doris 所有的功能 StarRocks 都是有的&a…...
【OSG学习笔记】Day 18: 碰撞检测与物理交互
物理引擎(Physics Engine) 物理引擎 是一种通过计算机模拟物理规律(如力学、碰撞、重力、流体动力学等)的软件工具或库。 它的核心目标是在虚拟环境中逼真地模拟物体的运动和交互,广泛应用于 游戏开发、动画制作、虚…...
Neo4j 集群管理:原理、技术与最佳实践深度解析
Neo4j 的集群技术是其企业级高可用性、可扩展性和容错能力的核心。通过深入分析官方文档,本文将系统阐述其集群管理的核心原理、关键技术、实用技巧和行业最佳实践。 Neo4j 的 Causal Clustering 架构提供了一个强大而灵活的基石,用于构建高可用、可扩展且一致的图数据库服务…...
【碎碎念】宝可梦 Mesh GO : 基于MESH网络的口袋妖怪 宝可梦GO游戏自组网系统
目录 游戏说明《宝可梦 Mesh GO》 —— 局域宝可梦探索Pokmon GO 类游戏核心理念应用场景Mesh 特性 宝可梦玩法融合设计游戏构想要素1. 地图探索(基于物理空间 广播范围)2. 野生宝可梦生成与广播3. 对战系统4. 道具与通信5. 延伸玩法 安全性设计 技术选…...
Python 包管理器 uv 介绍
Python 包管理器 uv 全面介绍 uv 是由 Astral(热门工具 Ruff 的开发者)推出的下一代高性能 Python 包管理器和构建工具,用 Rust 编写。它旨在解决传统工具(如 pip、virtualenv、pip-tools)的性能瓶颈,同时…...
QT3D学习笔记——圆台、圆锥
类名作用Qt3DWindow3D渲染窗口容器QEntity场景中的实体(对象或容器)QCamera控制观察视角QPointLight点光源QConeMesh圆锥几何网格QTransform控制实体的位置/旋转/缩放QPhongMaterialPhong光照材质(定义颜色、反光等)QFirstPersonC…...
【笔记】WSL 中 Rust 安装与测试完整记录
#工作记录 WSL 中 Rust 安装与测试完整记录 1. 运行环境 系统:Ubuntu 24.04 LTS (WSL2)架构:x86_64 (GNU/Linux)Rust 版本:rustc 1.87.0 (2025-05-09)Cargo 版本:cargo 1.87.0 (2025-05-06) 2. 安装 Rust 2.1 使用 Rust 官方安…...
uniapp 实现腾讯云IM群文件上传下载功能
UniApp 集成腾讯云IM实现群文件上传下载功能全攻略 一、功能背景与技术选型 在团队协作场景中,群文件共享是核心需求之一。本文将介绍如何基于腾讯云IMCOS,在uniapp中实现: 群内文件上传/下载文件元数据管理下载进度追踪跨平台文件预览 二…...
Python竞赛环境搭建全攻略
Python环境搭建竞赛技术文章大纲 竞赛背景与意义 竞赛的目的与价值Python在竞赛中的应用场景环境搭建对竞赛效率的影响 竞赛环境需求分析 常见竞赛类型(算法、数据分析、机器学习等)不同竞赛对Python版本及库的要求硬件与操作系统的兼容性问题 Pyth…...
k8s从入门到放弃之HPA控制器
k8s从入门到放弃之HPA控制器 Kubernetes中的Horizontal Pod Autoscaler (HPA)控制器是一种用于自动扩展部署、副本集或复制控制器中Pod数量的机制。它可以根据观察到的CPU利用率(或其他自定义指标)来调整这些对象的规模,从而帮助应用程序在负…...
当下AI智能硬件方案浅谈
背景: 现在大模型出来以后,打破了常规的机械式的对话,人机对话变得更聪明一点。 对话用到的技术主要是实时音视频,简称为RTC。下游硬件厂商一般都不会去自己开发音视频技术,开发自己的大模型。商用方案多见为字节、百…...
