JavaCV中openCV的拉普拉斯滤波器处理

1、javacv  1.5.10版本

package com.example.demo.ffpemg;import lombok.SneakyThrows;
import org.bytedeco.javacv.CanvasFrame;
import org.bytedeco.opencv.opencv_core.Mat;import javax.swing.*;
import java.awt.image.BufferedImage;import static org.bytedeco.opencv.global.opencv_core.BORDER_DEFAULT;
import static org.bytedeco.opencv.global.opencv_imgcodecs.imread;
import static org.bytedeco.opencv.global.opencv_imgproc.Laplacian;public class OpenCVTest1 {@SneakyThrowspublic static void main(String[] args) {// 读取图片final Mat src = imread("data/boldt.jpg");display(src, "Input");//        拉普拉斯滤波器(Laplacian Filter)是图像处理中的一种常见操作,它用于检测图像中的边缘。
//        拉普拉斯滤波器是一种二阶导数滤波器,能够突出图像中的快速变化部分,如边缘和纹理// 应用拉普拉斯滤波器// 注意:这里的参数可以根据需要进行调整// 第三个参数表示滤波器的深度,通常使用与源图像相同的深度// 第四个参数表示滤波器的大小,必须是正奇数// 第五个参数表示scale因子,用于控制结果的缩放// 第六个参数表示delta值,该值会被加到最终的像素值上final Mat dest = new Mat();Laplacian(src, dest, src.depth(), 1, 3, 0, BORDER_DEFAULT);display(dest, "Laplacian");}public static void display(Mat image, String caption) {// Create image window named "My Image".final CanvasFrame canvas = new CanvasFrame(caption, 1.0);// Request closing of the application when the image window is closed.canvas.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);// Convert from OpenCV Mat to Java Buffered image for displayfinal BufferedImage bi = OpenCVUtilsJava.toBufferedImage(image);// Show image on window.canvas.showImage(bi);}}
OpenCVUtilsJava.java
package com.example.demo.ffpemg;
import org.bytedeco.javacv.*;
import org.bytedeco.opencv.opencv_core.Mat;import javax.swing.*;
import java.awt.image.BufferedImage;
import java.io.File;import static org.bytedeco.opencv.global.opencv_imgcodecs.*;/*** Helper methods that simplify use of OpenCV API.*/
public class OpenCVUtilsJava {/*** Load an image and show in a CanvasFrame. If image cannot be loaded the application will exit with code 1.** @return loaded image*/public Mat loadAndShowOrExit(File file) {return loadAndShowOrExit(file, IMREAD_COLOR);}/*** Load an image and show in a CanvasFrame. If image cannot be loaded the application will exit with code 1.** @param flags Flags specifying the color type of a loaded image:*              <ul>*              <li> `>0` Return a 3-channel color image</li>*              <li> `=0` Return a gray scale image</li>*              <li> `<0` Return the loaded image as is. Note that in the current implementation*              the alpha channel, if any, is stripped from the output image. For example, a 4-channel*              RGBA image is loaded as RGB if the `flags` is greater than 0.</li>*              </ul>*              Default is gray scale.* @return loaded image*/public static Mat loadAndShowOrExit(File file, Integer flags) {Mat image = loadOrExit(file, flags);show(image, file.getName());return image;}/*** Load an image. If image cannot be loaded the application will exit with code 1.** @return loaded image*/public static Mat loadOrExit(File file) {return loadOrExit(file, IMREAD_COLOR);}/*** Load an image. If image cannot be loaded the application will exit with code 1.** @param flags Flags specifying the color type of a loaded image:*              <ul>*              <li> `>0` Return a 3-channel color image</li>*              <li> `=0` Return a gray scale image</li>*              <li> `<0` Return the loaded image as is. Note that in the current implementation*              the alpha channel, if any, is stripped from the output image. For example, a 4-channel*              RGBA image is loaded as RGB if the `flags` is greater than 0.</li>*              </ul>*              Default is gray scale.* @return loaded image*/public static Mat loadOrExit(File file, Integer flags) {Mat image = imread(file.getAbsolutePath(), flags);if (image.empty()) {System.out.println("Couldn't load image: " + file.getAbsolutePath());System.exit(1);}return image;}/*** Show image in a window. Closing the window will exit the application.*/public static void show(Mat mat, String title) {BufferedImage image = toBufferedImage(mat);show(image, title);}/*** Show image in a window. Closing the window will exit the application.*/public static void show(BufferedImage image, String title) {CanvasFrame canvas = new CanvasFrame(title, 1);canvas.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);canvas.showImage(image);}public static BufferedImage toBufferedImage(Mat mat) {// Make sure that FrameConverters and JavaCV Frame are properly closedtry (OpenCVFrameConverter.ToMat converter = new OpenCVFrameConverter.ToMat()) {try (Frame frame = converter.convert(mat)) {try (Java2DFrameConverter java2DConverter = new Java2DFrameConverter()) {return java2DConverter.convert(frame);}}}}/*** Save the image to the specified file.* <p>* The image format is chosen based on the filename extension (see `imread()` in OpenCV documentation for the list of extensions).* Only 8-bit (or 16-bit in case of PNG, JPEG 2000, and TIFF) single-channel or* 3-channel (with ‘BGR’ channel order) images can be saved using this function.* If the format, depth or channel order is different, use Mat::convertTo() , and cvtColor() to convert it before saving.** @param file  file to save to. File name extension decides output image format.* @param image image to save.*/public void save(File file, Mat image) {imwrite(file.getAbsolutePath(), image);}/*** Convert a Mat to ScalaFX Image*/public static javafx.scene.image.Image toFXImage(Mat mat) {try(OpenCVFrameConverter.ToMat openCVConverter = new OpenCVFrameConverter.ToMat()) {try(Frame frame = openCVConverter.convert(mat)){try(JavaFXFrameConverter javaFXConverter  = new JavaFXFrameConverter()) {return javaFXConverter.convert(frame);}}}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/888415.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PyQt 中的无限循环后台任务

在 PyQt 中实现一个后台无限循环任务&#xff0c;需要确保不会阻塞主线程&#xff0c;否则会导致 GUI 无响应。常用的方法是利用 线程&#xff08;QThread&#xff09; 或 任务&#xff08;QRunnable 和 QThreadPool&#xff09; 来运行后台任务。以下是一些实现方式和关键点&a…

项目集成篇:springboot集成redistemple实现自定义缓存,并且可以设置过期时间

在Spring Boot中集成Redis并使用RedisTemplate实现自定义缓存功能&#xff0c;同时能够设置缓存项的过期时间&#xff0c;可以通过以下步骤来完成。我们将创建一个服务层方法&#xff0c;该方法将使用RedisTemplate直接与Redis交互&#xff0c;并为每个缓存项设置特定的过期时间…

node.js实现分页,jwt鉴权机制,token,cookie和session的区别

文章目录 1. 分⻚功能2. jwt鉴权机制1.jwt是什么2.jwt的应用3.优缺点 3. cookie&#xff0c;token&#xff0c;session的对比 1. 分⻚功能 为什么要分页 如果数据量很⼤&#xff0c;⽐如⼏万条数据&#xff0c;放在⼀个⻚⾯显⽰的话显然不友好&#xff0c;这时候就需要采⽤分⻚…

CentOS 离线环境安装 Python2

CentOS离线环境安装Python2&#xff0c;可能在编译源码时因缺少各种依赖而无法编译成功。 此时可以找一台有网的电脑&#xff08;可以是Linux虚拟机&#xff09;&#xff0c;使用yum管理器的打包命令将Python2的安装包及依赖全部打包成rpm&#xff0c;然后拷贝到离线机器上安装…

ED6H系列FPGA口袋实验室

一、产品概述 ED6H系列FPGA口袋实验室是中科亿海微自主研发的基于“FPGA在线教学平台”的教学实践工具&#xff0c;专为高校电子相关专业师生打造&#xff0c;旨在为高校师生创造更具创新性与高效性的教学场景。具有高集成度、小巧便携、可扩展设计及自主可控等特点。本系列共…

实验三:Mybatis-动态 SQL

目录&#xff1a; 一 、实验目的&#xff1a; 通过 mybatis 提供的各种标签方法实现动态拼接 sql 二 、预习要求&#xff1a; 预习 if、choose、 when、where 等标签的用法 三、实验内容&#xff1a; 根据性别和名字查询用户使用 if 标签改造 UserMapper.xml使用 where 标签进行…

pytorch加载预训练权重失败

问题 给当前模型换了个开源的主干网络&#xff0c;并且删除了某些层后&#xff0c;但是发现预训练权重一直加载不上。strict为True时加载报错&#xff0c;strict为False时又什么都加载不上&#xff0c;然后不知道哪里出问题了。 解决 当strict为False时&#xff0c;load_sta…

python 笔记之线程同步和死锁

同步&#xff1a; 共享数据&#xff1a; 如果多个线程共同对某个数据修改&#xff0c;则可能出现不可预测的结果&#xff0c;为了保证数据的正确性&#xff0c;需要对多个数据进行同步 同步&#xff1a;一个一个的完成&#xff0c;一个做完另一个才能进来 效率会降低 使用Thre…

Python爬虫——猫眼电影

用python中requests库爬取猫眼电影信息并保存到csv文件中 猫眼专业版 爬取界面 效果预览 代码 import requests import jsonurl1https://piaofang.maoyan.com/dashboard-ajax?orderType0&uuid1938bd58ddac8-02c2bbe3b009ed-4c657b58-144000-1938bd58ddac8&timeStamp…

python 三钱筮法项目开发

三钱筮法项目技术说明 1. 技术栈 GUI框架: CustomTkinter 现代化的Tkinter扩展提供美观的界面组件支持主题定制 数据存储: JSON 卦象数据: gua_info.json记忆数据: memory.json易经解释: detail.json 图像处理: PIL (Python Imaging Library) 处理图标和图片资源 2. 主要功…

yagmail邮件发送库:如何用Python实现自动化邮件营销?

&#x1f3a5; 作者简介&#xff1a; CSDN\阿里云\腾讯云\华为云开发社区优质创作者&#xff0c;专注分享大数据、Python、数据库、人工智能等领域的优质内容 &#x1f338;个人主页&#xff1a; 长风清留杨的博客 &#x1f343;形式准则&#xff1a; 无论成就大小&#xff0c;…

NLP 的研究任务

自然语言处理&#xff08;Natural Language Processing, NLP&#xff09; NLP 的研究任务 自然语言处理&#xff08;Natural Language Processing, NLP&#xff09;1. **机器翻译**2. **情感分析**3. **智能问答**4. **文摘生成**5. **文本分类**6. **舆论分析**7. **知识图谱*…

无人机的计算机仿真模拟控制

&#x1f3e1;作者主页&#xff1a;点击&#xff01; &#x1f916;编程探索专栏&#xff1a;点击&#xff01; ⏰️创作时间&#xff1a;2024年12月3日10点24分 神秘男子影, 秘而不宣藏。 泣意深不见, 男子自持重, 子夜独自沉。 论文链接 点击开启你的论文编程之旅h…

vue+mars3d给影像底图叠加炫酷效果

话不多说&#xff0c;直接上效果图&#xff1a; 在这里墙体其实是有一个不太明显的流动效果 实现方式&#xff1a;这里我使用了PolylineEntityWallPrimitive&#xff0c;开始我用的是polygonEntity但是发现实现效果并不好&#xff0c;所有直接改用了线 map.vue文件&#xff1…

浅谈volatile

volatile有三个特性&#xff1a; &#xff08;1&#xff09;可见性 &#xff08;2&#xff09;不保证原子性 &#xff08;3&#xff09;禁止指令重排 下面我们一一介绍 &#xff08;一&#xff09;可见性 volatile的可见性是说共享变量只要修改&#xff0c;就可以被其他线…

Redis自学之路—高级特性(实现消息队列)(七)

目录 简介 Redis的Key和Value的数据结构组织 全局哈希表 渐进式rehash 发布和订阅 操作命令 publish 发布消息 subscribe 订阅消息 psubscribe订阅频道 unsubscribe 取消订阅一个或多个频道 punsubscribe 取消订阅一个或多个模式 查询订阅情况-查看活跃的频道 查询…

Java-09 深入浅出 MyBatis - 注解开发 注解映射 基本介绍 与 一对一模型

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 大数据篇正在更新&#xff01;https://blog.csdn.net/w776341482/category_12713819.html 目前已经更新到了&#xff1a; MyBatis&#xff…

【k8s】kubelet 的相关证书

在 Kubernetes 集群中&#xff0c;kubelet 使用的证书通常存放在节点上的特定目录。这些证书用于 kubelet 与 API 服务器之间的安全通信。具体的位置可能会根据你的 Kubernetes 安装方式和配置有所不同&#xff0c;下图是我自己环境【通过 kubeadm 安装的集群】中的kubelet的证…

ES语法(一)概括

一、语法 1、请求方式 Elasticsearch&#xff08;ES&#xff09;使用基于 JSON 的查询 DSL&#xff08;领域特定语言&#xff09;来与数据交互。 一个 ElasticSearch 请求和任何 HTTP 请求一样由若干相同的部件组成&#xff1a; curl -X<VERB> <PROTOCOL>://&l…

Redis开发实践

在现代开发中&#xff0c;Redis 已经成为一种重要的高性能内存数据库。无论是作为缓存、消息队列还是排行榜的实现工具&#xff0c;它都表现出了极高的性能和灵活性。本文将带你了解 Redis 的基本概念&#xff0c;并通过 Python 示例代码实现 Redis 的核心功能。 文章目录 1. R…