12.java openCV4.x 入门-HighGui之图像窗口显示

news2024/11/24 17:10:20
专栏简介

💒个人主页
📰专栏目录

点击上方查看更多内容
📖心灵鸡汤📖

我们唯一拥有的就是今天,唯一能把握的也是今天


建议把本文当作笔记来看,据说专栏目录里面有相应视频🤫
🧭文章导航🧭
⬆️ 11.Imgcodecs之图像读写
⬇️ 13.Core之图像差异比对(动态预警)

窗口操作之HighGui

  • 一、方法介绍
    • 1.imshow​
    • 2.waitKey
    • 3.moveWindow​
    • 4.resizeWindow​
    • 5.窗口销毁
      • 1.destroyAllWindows()
      • 2.destroyWindow​(java.lang.String winname)
    • 6.createJFrame​
    • 7.toBufferedImage​(Mat m)
  • 二、Jfram示例
    • 1.通过按钮指定格式读取图像
    • 2.通过滑动块调节图像亮度

   openCV提供了一个HighGui类,它可以用来将图像显示在窗口中。

一、方法介绍

  仅对全参方法进行说明

1.imshow​

  1. 在指定的一个窗口中显示一张图片
imshow​(java.lang.String winname, Mat img)
参数:
winname 一个String类型,表示窗口的名称。如果窗口不存在,将会创建一个新的窗口
img 一个Mat对象,表示要显示的图像
   这个方法通常与HighGui.waitKey(int delay) 方法一起使用,后者用于等待用户按键或指定的延迟时间,以便用户有足够的时间查看图像。

2.waitKey

1.等待一个键盘事件

waitKey​(int delay)
参数:
delay这个参数指定等待键盘事件的时间,单位为毫秒。如果 delay 为正数,函数会等待指定的时间,如果这段时间内有键盘事件发生,它会立即返回并给出键盘事件的ASCII码。如果在这段时间内没有键盘事件发生,函数返回值为 -1。如果 delay 为0,函数会无限期地等待键盘事件

3.moveWindow​

1.移动窗口

moveWindow​(java.lang.String winname, int x, int y)
参数:
winname指定窗口的名称
x窗口新的x轴位置坐标
y窗口新的y轴位置坐标
窗口的新位置是相对于屏幕左上角的

4.resizeWindow​

1.调整显示窗口的大小

resizeWindow​(java.lang.String winname, int width, int height)
参数:
winname指定窗口的名称
width 窗口新的宽度
height 窗口新的高度

5.窗口销毁

1.destroyAllWindows()

  销毁全部窗口

2.destroyWindow​(java.lang.String winname)

  销毁指定的窗口

6.createJFrame​

  创建一个JFrame窗口,用于显示图像。(示例见下文)

createJFrame​(java.lang.String title, int flag)
参数:
titleJFrame窗口的标题
flag 指定窗口的属性。在java openCV中对相关的属性进行了简化,仅有两个类型:
WINDOW_AUTOSIZE:根据内容自动调整窗口大小(窗口大小不可拖动)
WINDOW_NORMAL:可托送窗口大小

7.toBufferedImage​(Mat m)

  将OpenCV的Mat对象转换为Java AWT的Image对象

二、Jfram示例

   代码基于目前已知的函数进行实现,所以代码并不合理!!!
   了解即可!!!

1.通过按钮指定格式读取图像

    public static void main(String[] args) {
        System.loadLibrary(Core.NATIVE_LIBRARY_NAME);

        //读取图片
        Mat imread = Imgcodecs.imread("123.png");
        //窗口
        JFrame frame = HighGui.createJFrame("imread", HighGui.WINDOW_AUTOSIZE);
        // 创建按钮
        JButton b1 = new JButton("Gray");
        JButton b2 = new JButton("REDUCED_COLOR_2");
        JPanel panel = new JPanel();
        panel.add(b1);
        panel.add(b2);
        frame.add(panel, BorderLayout.NORTH);

        // 转换Mat到BufferedImage
        Image bufferedImage = HighGui.toBufferedImage(imread);
        final ImageIcon[] imageIcon = {new ImageIcon(bufferedImage)};

        // 创建JLabel来显示图像
        JLabel jLabel = new JLabel(imageIcon[0]);
        frame.add(jLabel, BorderLayout.CENTER);


        b1.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseClicked(MouseEvent e) {
                super.mouseClicked(e);
                Mat imread = Imgcodecs.imread("123.png",Imgcodecs.IMREAD_GRAYSCALE);
                Image image = HighGui.toBufferedImage(imread);
                imageIcon[0] =new ImageIcon(image);
                jLabel.setIcon(imageIcon[0]);
                //重绘
                frame.repaint();
            }
        });
        b2.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseClicked(MouseEvent e) {
                super.mouseClicked(e);
                Mat imread = Imgcodecs.imread("123.png",Imgcodecs.IMREAD_REDUCED_COLOR_2);
                Image image = HighGui.toBufferedImage(imread);
                imageIcon[0] =new ImageIcon(image);
                jLabel.setIcon(imageIcon[0]);
                frame.repaint();
            }
        });
        //
        frame.pack();
        frame.setVisible(true);
    }

效果:
请添加图片描述

2.通过滑动块调节图像亮度

    public static void main(String[] args) {
        System.loadLibrary(Core.NATIVE_LIBRARY_NAME);

        //读取图片
        Mat imread = Imgcodecs.imread("123.png");
        //窗口
        JFrame frame = HighGui.createJFrame("imread", HighGui.WINDOW_AUTOSIZE);
        // 创建滑块
        JSlider slider = new JSlider(0,10,1);
        slider.setMajorTickSpacing(10);
        slider.setMinorTickSpacing(1);
        slider.setPaintTicks(true);
        slider.setPaintLabels(true);
        frame.add(slider,BorderLayout.NORTH);
        // 转换Mat到BufferedImage
        Image bufferedImage = HighGui.toBufferedImage(imread);
        final ImageIcon[] imageIcon = {new ImageIcon(bufferedImage)};
        // 创建JLabel来显示图像
        JLabel jLabel = new JLabel(imageIcon[0]);
        frame.add(jLabel, BorderLayout.CENTER);

        slider.addChangeListener(new ChangeListener() {
            @Override
            public void stateChanged(ChangeEvent e) {
                JSlider source = (JSlider) e.getSource();
                int value = source.getValue();
                Mat dst =new Mat();
                imread.convertTo(dst,imread.type(),value);
                Image image = HighGui.toBufferedImage(dst);
                imageIcon[0] =new ImageIcon(image);
                jLabel.setIcon(imageIcon[0]);
                frame.repaint();
            }
        });
        //
        frame.pack();
        frame.setVisible(true);
    }

结果:
在这里插入图片描述

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

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

相关文章

Ubuntu Desktop 免费的文件 / 目录差异比较工具 (Beyond Compare 为收费软件)

Ubuntu Desktop 免费的文件 / 目录差异比较工具 [Beyond Compare 为收费软件] 1. Installation2. Meld Diff Viewer3. Lock to LauncherReferences Meld - Visual diff and merge tool https://meldmerge.org/ Meld helps you compare files, directories, and version contro…

自动化测试大总结

🔥 交流讨论:欢迎加入我们一起学习! 🔥 资源分享:耗时200小时精选的「软件测试」资料包 🔥 教程推荐:火遍全网的《软件测试》教程 📢欢迎点赞 👍 收藏 ⭐留言 &#x1…

嵌入式学习51-单片机4

知识零碎: nop空指令 CRC校验 为了保证51单片与温度传感18b20 之间的高电平 采用一个上拉电阻改变电平的高低 温度寄存器原理

NIKKE胜利女神PC怎么设置中文 手把手教你设置中文教程

这个游戏中的妮姬分四个企业,其中朝圣者这个派别的妮姬很少而且不在愿望单理,朝圣者的所有姐姐都很哇塞,红莲更是其中的大姐大。一般想抽朝圣者只能靠歪或者出限定卡池,举个栗子,我入坑的时候 朝圣者 神罚 是限定卡池&…

C++——栈和队列容器

前言:这篇文章我们将栈和队列两个容器放在一起进行分享,因为这两个要分享的知识较少,而且两者在结构上有很多相似之处,比如栈只能在栈顶操作,队列只能在队头和队尾操作。 不同于前边所分享的三种容器,这篇…

设计模式-结构型-装饰器模式-decorator

发票基本类 public class Invoice {public void printInvoice() {System.out.println("打印发票正文");} } 发票正文类 public class Decorator extends Invoice {protected Invoice ticket;public Decorator(Invoice ticket) {this.ticket ticket;}Overridepubl…

WebKit是什么?

WebKit是一个开源的浏览器引擎,它用于呈现网页内容在许多现代浏览器中,包括Safari浏览器、iOS内置浏览器、以及一些其他浏览器如Google Chrome的早期版本。以下是一些关于WebKit的重要信息: 起源和发展:WebKit最初是由苹果公司为其…

P8707 [蓝桥杯 2020 省 AB1] 走方格

原题链接:[蓝桥杯 2020 省 AB1] 走方格 - 洛谷 目录 1.题目描述 2.思路分析 3.代码实现 1.题目描述 2.思路分析 题目大意:现在有个人站在第 1 行第 1 列,要走到第 i 行第 j 列(每次只能向右或者向下走)&#xff0…

异常的种类

Oracle从入门到总裁:​​​​​​https://blog.csdn.net/weixin_67859959/article/details/135209645 Oracle 运行时错误可以分为 Oracle 错误和用户自定义错误,与此对应,根据异常产生的机制和原理,可将 Oracle 的系统异常分为 3 种 预定义…

TiDB 组件 GC 原理及常见问题

本文详细介绍了 TiDB 的 Garbage Collection(GC)机制及其在 TiDB 组件中的实现原理和常见问题排查方法。 TiDB 底层使用单机存储引擎 RocksDB,并通过 MVCC 机制,基于 RocksDB 实现了分布式存储引擎 TiKV,以支持高可用分…

【RAG实践】基于LlamaIndex和Qwen1.5搭建基于本地知识库的问答机器人

什么是 RAG LLM 会产生误导性的 “幻觉”,依赖的信息可能过时,处理特定知识时效率不高,缺乏专业领域的深度洞察,同时在推理能力上也有所欠缺。 正是在这样的背景下,检索增强生成技术(Retrieval-Augmented…

Pillow教程09:图片格式(png,jpg,ico等)批量转换+批量修改图片尺寸

---------------Pillow教程集合--------------- Python项目18:使用Pillow模块,随机生成4位数的图片验证码 Python教程93:初识Pillow模块(创建Image对象查看属性图片的保存与缩放) Pillow教程02:图片的裁…

场景文本检测识别学习 day02(AlexNet论文阅读、ResNet论文精读)

怎么读论文 在第一遍阅读的时候,只需要看题目,摘要和结论,先看题目是不是跟我的方向有关,看摘要是不是用到了我感兴趣的方法,看结论他是怎么解决摘要中提出的问题,或者怎么实现摘要中的方法,然…

华为机试题

目录 第一章、HJ1计算字符串最后一个单词的长度,单词以空格隔开。1.1)描述1.2)解题第二章、算法题HJ2 计算某字符出现次数1.1)题目描述1.2)解题思路与答案第三章、算法题HJ3 明明的随机数1.1)题目描述1.2&a…

C++——优先级队列

前言:这篇文章我们继续来分享一个c的容器——优先级队列。 一.理解优先级 何为优先级一说?实际上就是有顺序的意思。 优先级队列,即有顺序的队列,是一个无需我们自己进行排序操作,在数据传入时就会由容器自己排好序的…

Linux系统安装内网穿透实现固定公网地址访问本地MinIO服务

文章目录 前言1. 创建Buckets和Access Keys2. Linux 安装Cpolar3. 创建连接MinIO服务公网地址4. 远程调用MinIO服务小结5. 固定连接TCP公网地址6. 固定地址连接测试 正文开始前给大家推荐个网站,前些天发现了一个巨牛的 人工智能学习网站, 通俗易懂&am…

【蓝桥杯嵌入式】定时器的PWM输出与输入捕获(测量频率与占空比)

【蓝桥杯嵌入式】定时器的PWM输出与脉冲输 入捕获(测量频率与占空比) PWM输出cubemx配置程序设计 输入捕获cubemx配置程序设计 真题典例分析 PWM输出 cubemx配置 PWM输出引脚配置,这里使用PA6和PA7引脚输出两路PWM信号,分别对应的…

计算机提示msvcp140.dll丢失的解决方法

在日常操作与深度应用计算机系统的过程中,我们难免会遭遇各类技术性问题。其中,一种颇为常见且可能导致应用程序无法正常启动或运行的情况便是“msvcp140.dll文件缺失”。这一现象,对于无论是经验丰富的IT专业人士,还是对计算机知…

Linux操作系统(六):文件系统组件

参考资料:阿秀的笔记 文件系统 1. 文件系统的基本组成2. 文件的使用3.文件如何存储3.1 目录怎么存储 4.Linux继承于Unix系统的Unix文件实现方式4.1 Linux Ext 2/3 文件系统4.2 Linux Ext 4 文件系统4.3 磁盘空闲空间的管理机制4.3.1 空闲表法4.3.2 空闲链表法4.3.3…

网易云歌曲评论抓取

网易云歌曲评论爬取 步骤1.找到一首歌曲2.按下F12键打开开发者模式,对其进行抓包3.查找获得评论数据的接口4.对获得评论数据接口进行分析5.构建加密函数方法一方法二运行结果全部代码使用Js文件只使用python新的代码小结与展望这次的任务是获取网易云音乐下面的评论,涉及的知…