智能图像处理平台:图像处理配置类
这里我们先修改一下依赖,不用JavaCV,用openCV。

导入依赖:
<!-- JavaCV 依赖,用于图像和视频处理 -->
<!-- <dependency>-->
<!-- <groupId>org.bytedeco</groupId>-->
<!-- <artifactId>javacv</artifactId>-->
<!-- <version>1.5.10</version>-->
<!-- </dependency>-->
<!-- <dependency>-->
<!-- <groupId>org.bytedeco</groupId>-->
<!-- <artifactId>javacpp</artifactId>-->
<!-- <version>1.5.10</version>-->
<!-- </dependency>--><!-- OpenCV,计算机视觉库 --><dependency><groupId>org.openpnp</groupId><artifactId>opencv</artifactId><version>4.6.0-0</version><scope>system</scope><systemPath>${project.basedir}/lib/opencv-460.jar</systemPath></dependency>
编写图像处理配置类,包括图像拉取,图像处理、图像上传三个部分:
package com.llpp.tool;import cn.hutool.http.ContentType;
import cn.hutool.http.HttpUtil;
import com.llpp.config.MinioConfig;
import org.opencv.core.CvType;
import org.opencv.core.Mat;
import org.opencv.core.Size;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.CLAHE;
import org.opencv.imgproc.Imgproc;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.util.ClassUtils;
import org.springframework.web.multipart.MultipartFile;import javax.annotation.PostConstruct;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Objects;
import java.util.UUID;/*** @Author 21326* @Date 2025 2025/2/28 23:50*/
@Component
public class ImageOperationTool {@Autowiredprivate MinioConfig minioConfig;public static ImageOperationTool imageOperationTool;private static String PATH = ClassUtils.getDefaultClassLoader().getResource("openCV/opencv_java460.dll").getPath();static {System.load(PATH);}@PostConstructpublic void init() {imageOperationTool = this;imageOperationTool.minioConfig = this.minioConfig;}public static String imageOperation(String url, String operation) {File output = new File("processed_image.jpg");FileInputStream fis = null;try {// 从 URL 读取图像数据output = HttpUtil.downloadFileFromUrl(url, output);// 将图像数据转换为 OpenCV 的 Mat 对象Mat mat = Imgcodecs.imread(output.getAbsolutePath());// 根据操作类型执行相应的操作Mat processedMat = performOperation(mat, operation);// 将处理后的 Mat 对象保存为文件Imgcodecs.imwrite(output.getAbsolutePath(), processedMat);// 将文件转换为 MultipartFile 对象fis = new FileInputStream(output);MultipartFile multipartFile = new MultipartFileTool(UUID.randomUUID().toString(), "image/jpg", ContentType.OCTET_STREAM.getValue(), fis);// 上传到 MinIOreturn imageOperationTool.minioConfig.putObject(multipartFile);} catch (Exception e) {System.out.println(e.getMessage());} finally {try {if (Objects.nonNull(fis)) fis.close();} catch (IOException e) {throw new RuntimeException(e);}output.delete();}return null;}private static Mat performOperation(Mat mat, String operation) {switch (operation.toLowerCase()) {case "gray": {// 灰度化Mat grayMat = new Mat();Imgproc.cvtColor(mat, grayMat, Imgproc.COLOR_BGR2GRAY);return grayMat;}case "scale": {// 缩放Mat scaledMat = new Mat();Imgproc.resize(mat, scaledMat, new Size(mat.width() / 2, mat.height() / 2));return scaledMat;}case "gaussianblur": {// 高斯滤波Mat gaussianMat = new Mat();Imgproc.GaussianBlur(mat, gaussianMat, new Size(3, 3), 0);return gaussianMat;}case "canny": {// 边缘检测Mat cannyMat = new Mat();Imgproc.Canny(mat, cannyMat, 100, 200);return cannyMat;}case "houghlines": {// 霍夫直线变换Mat lines = new Mat();Imgproc.HoughLines(mat, lines, 1, Math.PI / 180, 100, 0, 0, 0, Math.PI);Mat resultMat = new Mat(lines.rows(), 2, CvType.CV_32F);for (int i = 0; i < lines.rows(); i++) {double[] line = lines.get(i, 0);resultMat.put(i, 0, line[0]);resultMat.put(i, 1, line[1]);}return resultMat;}case "sobel": {// Sobel边缘检测Mat sobelMat = new Mat();Imgproc.Sobel(mat, sobelMat, CvType.CV_8U, 1, 0);return sobelMat;}case "laplacian": {Mat laplacianMat = new Mat();Imgproc.Laplacian(mat, laplacianMat, CvType.CV_8U);return laplacianMat;}case "erode": {Mat erodeMat = new Mat();Mat kernel = Imgproc.getStructuringElement(Imgproc.MORPH_RECT, new Size(3, 3));Imgproc.erode(mat, erodeMat, kernel);return erodeMat;}case "dilate": {Mat dilateMat = new Mat();Mat kernel = Imgproc.getStructuringElement(Imgproc.MORPH_RECT, new Size(3, 3));Imgproc.dilate(mat, dilateMat, kernel);return dilateMat;}case "medianblur": {Mat medianBlurMat = new Mat();Imgproc.medianBlur(mat, medianBlurMat, 3);return medianBlurMat;}case "bilateralfilter": {Mat bilateralFilterMat = new Mat();Imgproc.bilateralFilter(mat, bilateralFilterMat, 9, 75, 75);return bilateralFilterMat;}case "threshold": {Mat thresholdMat = new Mat();Imgproc.threshold(mat, thresholdMat, 127, 255, Imgproc.THRESH_BINARY);return thresholdMat;}case "adaptivethreshold": {Mat adaptiveThresholdMat = new Mat();Imgproc.adaptiveThreshold(mat, adaptiveThresholdMat, 255, Imgproc.ADAPTIVE_THRESH_MEAN_C, Imgproc.THRESH_BINARY, 11, 2);return adaptiveThresholdMat;}case "sift": {Mat siftMat = new Mat();return siftMat;}case "harris": {Mat harrisMat = new Mat();return harrisMat;}case "houghcircles": {Mat circles = new Mat();Imgproc.HoughCircles(mat, circles, Imgproc.HOUGH_GRADIENT, 1, mat.height() / 16, 100, 100, 0, 0);Mat resultMat = new Mat(circles.cols(), 3, CvType.CV_32F);for (int i = 0; i < circles.cols(); i++) {double[] circle = circles.get(0, i);resultMat.put(i, 0, circle[0]);resultMat.put(i, 1, circle[1]);resultMat.put(i, 2, circle[2]);}return resultMat;}case "clahe": {Mat claheMat = new Mat();CLAHE clahe = Imgproc.createCLAHE();clahe.apply(mat, claheMat);return claheMat;}case "rgb2hsv": {Mat hsvMat = new Mat();Imgproc.cvtColor(mat, hsvMat, Imgproc.COLOR_BGR2HSV);return hsvMat;}case "rgb2lab": {Mat labMat = new Mat();Imgproc.cvtColor(mat, labMat, Imgproc.COLOR_RGB2Lab);return labMat;}default:return mat;}}
}
相关文章:
智能图像处理平台:图像处理配置类
这里我们先修改一下依赖,不用JavaCV,用openCV。 导入依赖: <!-- JavaCV 依赖,用于图像和视频处理 --> <!-- <dependency>--> <!-- <groupId>org.bytedeco</groupId>--> &l…...
【图文详解】什么是微服务?什么是SpringCloud?
目录 一.认识微服务架构 ??微服务带来的挑战 二.微服务解决方案SpringCloud ??SpringCloud的版本 ??SpringCloud和SpringBoot的关系 ??SpringCloud实现方案 Spring Cloud Netfix Spring Cloud Alibaba ??Spring Cloud 实现对比 在入门Spring Cloud 之前&…...
基于ssm的校园跑腿管理系统+vue
作者主页:舒克日记 简介:Java领域优质创作者、Java项目、学习资料、技术互助 文中获取源码 项目介绍 系统共有管理员、用户两个角色 管理员主要的功能用户信息管理、任务信息管理、任务类型管理、接单信息管理、公告信息管理、投诉信息管理、公告类型管…...
5个GitHub热点开源项目!!
1.自托管 Moonlight 游戏串流服务:Sunshine 主语言:C,Star:14.4k,周增长:500 这是一个自托管的 Moonlight 游戏串流服务器端项目,支持所有 Moonlight 客户端。用户可以在自己电脑上搭建一个游戏…...
docker通用技术介绍
docker通用技术介绍 1.docker介绍 1.1 基本概念 docker是一个开源的容器化平台,用于快速构建、打包、部署和运行应用程序。它通过容器化技术将应用及其依赖环境(如代码、库、系统工具等)打包成一个标准化、轻量级的独立单元,实…...
#渗透测试#批量漏洞挖掘#某图创图书馆集群管理系统updOpuserPw SQL注入(CVE-2021-44321)
免责声明 本教程仅为合法的教学目的而准备,严禁用于任何形式的违法犯罪活动及其他商业行为,在使用本教程前,您应确保该行为符合当地的法律法规,继续阅读即表示您需自行承担所有操作的后果,如有异议,请立即停…...
智能合约安全 | 合约无效化攻击
目录: 智能合约安全 合约无效化攻击 合约自毁函数 selfdestruct 攻击实现 漏洞防御 总结 智能合约安全 合约无效化攻击 合约无效化攻击类同于web安全中的逻辑漏洞中的一种 我们这里拿一个典型的例子来讲解 有这样一份智能合约, 每个人可以向其中发送1 eth 第七个…...
RabbitMQ 的介绍与使用
一. 简介 1> 什么是MQ 消息队列(Message Queue,简称MQ),从字面意思上看,本质是个队列,FIFO先入先出,只不过队列中存放的内容是message而已。 其主要用途:不同进程Process/线程T…...
【手撕算法】K-Means聚类全解析:从数学推导到图像分割实战
摘要 聚类算法是探索数据内在结构的利器!本文手撕K-Means核心公式,结合Python代码实现与图像分割案例,详解: ✅ 欧氏距离计算 ✅ 簇中心迭代更新 ✅ 肘部法则优化 目录 摘要 目录 一、算法核心思想 二、数学原理详解 2.1 …...
【SQL技术】不同数据库引擎 SQL 优化方案剖析
一、引言 在数据处理和分析的世界里,SQL 是不可或缺的工具。不同的数据库系统,如 MySQL、PostgreSQL(PG)、Doris 和 Hive,在架构和性能特点上存在差异,因此针对它们的 SQL 优化策略也各有不同。这些数据库…...
RabbitMQ系列(二)基本概念之Publisher
在 RabbitMQ 中,Publisher(发布者) 是负责向 RabbitMQ 服务器发送消息的客户端角色,通常被称为“生产者”。以下是其核心功能与工作机制的详细解析: 一、核心定义与作用 消息发送者 Publisher 将消息发送到 RabbitMQ 的…...
OAK相机的抗震性测试
在工业环境中,双目视觉相机必须具备与工作环境同等的坚固性。鉴于部分客户会将我们的相机应用于恶劣环境(例如安装在重型机械上),我们依据EN 60068-2-6:2008标准对相机进行了振动耐受性测试。 测试涉及的相机型号包括:…...
2025最新Nginx高频面试题
2025最新Nginx高频面试题 摘要:本文整理了2025年企业高频Nginx面试题,覆盖核心原理、配置优化、安全防护及云原生场景实战,助你轻松应对技术面试! 核心原理篇 1. Nginx的Master-Worker架构优势是什么? 答案…...
【Kubernetes】API server 限流 之 maxinflight.go
这个文件实现了一个基于信号量(Channel)的简单限流器。 基础知识 总共有四种channel 带缓冲的channel nonMutatingChan、mutatingChan 都是带缓冲的channel ,这类channel 的特点是: 这允许最多 mutatingLimit /nonMutatingLimit 个请求同时获取令牌并执…...
推荐算法工程师的技术图谱和学习路径
推荐算法工程师的技术图谱和学习路径可以从多个维度进行概述,可以总结如下: 一、技术图谱 推荐算法工程师需要掌握的技术栈主要分为以下几个方面: 数学基础: 微积分、线性代数、概率论与统计学是推荐算法的基础,用于理解模型的数学原理和优化算法。高等数学、最优化理论…...
Milvus高性能向量数据库与大模型结合
Milvus | 高性能向量数据库,为规模而构建Milvus 是一个为 GenAI 应用构建的开源向量数据库。使用 pip 安装,执行高速搜索,并扩展到数十亿个向量。https://milvus.io/zh Milvus 是什么? Milvus 是一种高性能、高扩展性的向量数据…...
轮式机器人在复杂地形中如何选择合适的全局路径规划算法?
已思考完成 收起 嗯,用户问的是轮式机器人在复杂地形中如何选择合适的全局路径规划算法。首先,我需要理解复杂地形可能带来的挑战,比如崎岖的路面、动态障碍物、非结构化环境等等。轮式机器人在这里的运动控制需要考虑地形通过性、稳定性&…...
Metal学习笔记九:光照基础
光和阴影是使场景流行的重要要求。通过一些着色器艺术,您可以突出重要的对象、描述天气和一天中的时间并设置场景的气氛。即使您的场景由卡通对象组成,如果您没有正确地照亮它们,场景也会变得平淡无奇。 最简单的光照方法之一是 Phong 反射模…...
【字符串】最长公共前缀 最长回文子串
文章目录 14. 最长公共前缀解题思路:模拟5. 最长回文子串解题思路一:动态规划解题思路二:中心扩散法 14. 最长公共前缀 14. 最长公共前缀 编写一个函数来查找字符串数组中的最长公共前缀。 如果不存在公共前缀,返回空字符…...
Linux提权之详细总结版(完结)
这里是我写了折磨多提权的指令的总结 我这里毫无保留分享给大家哦 首先神魔是提权 我们完整的渗透测试的流程是(个人总结的) 首先提升权限是我们拿到webshell之后的事情,如何拿到webshell,怎末才能拿到webshell,朋友们等我更新,持续更新中,下一篇更新的是windows提权 好了 废…...
2024三星固件下载完整指南:跨平台开源工具Bifrost使用教程
2024三星固件下载完整指南:跨平台开源工具Bifrost使用教程 【免费下载链接】Bifrost Cross-platform tool for downloading Samsung mobile device firmware. 项目地址: https://gitcode.com/gh_mirrors/sa/Bifrost 三星固件下载、三星刷机工具、Bifrost开源…...
【稀缺首发】全球仅12家头部科技公司验证的AI Agent机器学习架构(附可复用决策树模板)
更多请点击: https://kaifayun.com 第一章:AI Agent机器学习应用的范式跃迁 传统机器学习系统通常以静态模型为中心,依赖人工特征工程、离线训练与固定推理流程。而AI Agent的兴起正推动一场根本性范式跃迁:从“被动预测”转向“…...
Godot RE Tools深度解析:游戏逆向工程的全栈解决方案
Godot RE Tools深度解析:游戏逆向工程的全栈解决方案 【免费下载链接】gdsdecomp Godot reverse engineering tools 项目地址: https://gitcode.com/GitHub_Trending/gd/gdsdecomp 在游戏开发与逆向工程领域,Godot引擎的二进制资源格式一直是一个…...
机房动环监控系统是什么?其主要功能及智能运用方向有哪些?
机房动环监控系统的重要性 为信息技术的稳健运行提供了保障,尤其是在现代社会日益依赖数据和信息的背景下。利用实时监测电力、温度、湿度环境参数发生,还大幅度降低了因停机带来的经济损失。以大榕树科技为例,他们采用先进的监控系统&#x…...
为什么82%的保险AI Agent项目卡在POC阶段?一线技术总监首度公开6个致命设计盲区
更多请点击: https://codechina.net 第一章:为什么82%的保险AI Agent项目卡在POC阶段? 保险行业正加速拥抱AI Agent技术,但据2024年《亚太保险科技落地白皮书》统计,82%的AI Agent项目在概念验证(POC&…...
网易2026年Q1财报:游戏增长背后,AI、跨端与全球化面临哪些挑战?
网易发布2026年Q1财报5月21日,网易发布2026年第一季度财报。大体上,网易呈现出基本面企稳、公司效率提升以释放利润的态势。财报显示,网易Q1净收入306亿元,同比增长6.1%,Non - GAAP归母净利润为107亿元。游戏及相关增值…...
emWin GUIBuilder按钮样式修改问题解决方案
1. 问题现象与背景解析在Keil MDK开发环境中使用emWin的GUIBuilder工具时,许多开发者会遇到一个典型问题:创建按钮(Button)等控件后无法修改其外观设计。具体表现为:在GUI设计界面选中按钮控件,尝试调整颜色…...
从霍金难题到MESI协议:原子操作性能瓶颈的硬件根源与优化实践
1. 项目概述:从霍金的难题到现代CPU的协同困境 如果你写过并发程序,或者研究过Linux内核的同步机制,你一定对“原子操作”和“缓存一致性”这两个词不陌生。我们常常被告知,原子操作是昂贵的,因为它需要“锁总线”或者…...
3分钟快速优化Windows 11:免费开源工具Win11Debloat完全指南
3分钟快速优化Windows 11:免费开源工具Win11Debloat完全指南 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other changes to declutter …...
【纳瓦尔宝典】财富篇精读:程序员实现财富自由的底层逻辑
本文是《纳瓦尔宝典》第一部分"财富"与第二部分"判断力"的完整精读笔记,专为程序员群体量身打造。结合技术职场实际,拆解每一个核心观点,提供可落地的行动指南。一、积累财富:不是靠打工,而是靠创…...
