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

专栏简介

💒个人主页
📰专栏目录

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

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


建议把本文当作笔记来看,据说专栏目录里面有相应视频🤫
🧭文章导航🧭
⬆️ 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);
    }

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【每日刷题】Day7

【每日刷题】Day7 🥕个人主页:开敲🍉 🔥所属专栏:每日刷题🍍 🌼文章目录🌼 1. 206. 反转链表 - 力扣(LeetCode) 2. 203. 移除链表元素 - 力扣(…

【java数据结构-二叉树详解(下)带你手撕对称二叉树等难题(附题目链接)】

🌈个人主页:努力学编程’ ⛅个人推荐:基于java提供的ArrayList实现的扑克牌游戏 |C贪吃蛇详解 ⚡学好数据结构,刷题刻不容缓:点击一起刷题 🌙心灵鸡汤:总有人要赢,为什么不能是我呢 …

正则问题【蓝桥杯】/dfs

正则问题 dfs 刚开始用的是栈&#xff0c;没有想到dfs… #include<iostream> #include<stack> using namespace std; string s; int pos; int dfs() {//ans表示到当前位置最多的x数目//num表示暂存的x数目int num0,ans0;while(pos<s.size()){if(s[pos](){pos;…

蓝桥杯-【二分】肖恩的苹果林

思路:有点类似于找最大值的最小化。 代码及解析 常规的模板引用40% #include <bits/stdc.h> using namespace std; #define ll long long const ll N1e53; ll a[N]; ll m,n; ll chack(ll mid) {int res1,last0;for(int i1;i<n;i){ if(a[i]-a[last]>mid){res;las…

秋招算法刷题6

20240408 1.两数之和 &#xff08;时间复杂度是O&#xff08;n的平方&#xff09;&#xff09; public int[] twoSum(int[] nums, int target){int nnums.length; for(int i0;i<n;i){ for(int j1;j<n;j){ if(nums[i][j]target){ …

大型央国企“信创化”与数字化转型建设思路

一、央国企信创化与数字化转型时代背景 1、信创概念普及&#xff1a; 信创&#xff0c;即“信息技术应用创新”。是我国自主信息产业聚焦的核心&#xff0c;旨在通过对IT硬件、软件等各个环节的重构&#xff0c;基于我国自有IT底层架构和标准&#xff0c;形成自有开放生态&am…

使用Mac自带终端进行远程ssh连接Linux服务器

废话不多说&#xff0c;直接上图 好吧&#xff0c;我承认我是多此一举&#xff0c;脱裤子放pi了&#xff0c;其实只需要在终端输入一行命令就可以了&#xff08;呜呜&#xff5e;&#xff09; ssh rootip -p 22 需要注意的是&#xff0c;命令里的ip地址同样要替换成你自己的服…

【并发】第四篇 AtomicInteger原子操作

导航 一. 简介二. 源码分析三. 原子操作原理三. 实际用途1. 标志位2. 唯一标识生成器3. 计数器一. 简介 AtomicInteger是Java中提供的一种线程安全的原子操作类,用来实现对整数类型的原子操作。它可以在多线程环境下保证对整数的原子性操作,而不需要使用synchronized关键字或…

分类预测 | Matlab实现CPO-LSSVM冠豪猪算法优化最小二乘支持向量机数据分类预测

分类预测 | Matlab实现CPO-LSSVM冠豪猪算法优化最小二乘支持向量机数据分类预测 目录 分类预测 | Matlab实现CPO-LSSVM冠豪猪算法优化最小二乘支持向量机数据分类预测分类效果基本介绍程序设计参考资料 分类效果 基本介绍 1.Matlab实现CPO-LSSVM冠豪猪算法优化最小二乘支持向量…

抖店运营没有销量?想要快速拉高,产品部分一定做好!

大家好&#xff0c;我是电商小布。 我们开通抖音小店&#xff0c;运营店铺的最终目的&#xff0c;都是为了顺利实现转化。 但是有的小伙伴在开店运营之后&#xff0c;发现自己的店铺在销量上并没有什么起色在。 出现这个情况是怎么回事呢&#xff1f; 之前就有给大家说过&a…

寻找伙伴/拓展业务/开拓市场 2024CBTC上海国际储能展,为您提供海量商机!

在全球能源转型的背景下&#xff0c;电力市场正在经历一场前所未有的大变革&#xff0c;以储能为核心的新型电力系统建设正成为能源转型的重要抓手&#xff0c;给电力及新能源行业带来更多机遇。 由湖南省电池产业协会、中国设备管理协会、沪粤储能产业联盟、深圳国际投融资商…

零售行业数字化广告评价标准 - 《IAB/MRC零售(广告)测量指南》

IAB/MRC零售&#xff08;广告&#xff09;测量指南 --- 最新标准&#xff0c;2024年1月发布 目录 1出台此标准的目的是什么&#xff1f;2标准宗旨3本标准的主要关键领域4为什么这对品牌和零售商很重要5能给零售媒体中小型玩家带来什么机会&#xff1f;6评价零售媒体效果的最…

React - 你知道useffect函数内如何模拟生命周期吗

难度级别:中级及以上 提问概率:65% 很多前端开发人员习惯了Vue或者React的组件式开发,熟知组件的周期过程包含初始化、挂载完成、修改和卸载等阶段。但是当使用Hooks做业务开发的时候,看见一个个useEffect函数,却显得有些迷茫,因为在us…

人工智能的分类有哪些

人工智能&#xff08;AI&#xff09;可以根据不同的分类标准进行分类。以下是一些常见的分类方法&#xff1a; 1. **按功能分类**&#xff1a; - 弱人工智能&#xff08;Narrow AI&#xff09;&#xff1a;也称为狭义人工智能&#xff0c;指专注于执行特定任务的AI系统&…

富文本编辑器的下载安装使用

为什么选择vue-quill-editor&#xff1f; 在众多的富文本编辑器中&#xff0c;vue-quill-editor因其易用性、灵活性以及对Vue框架友好的特性而受到开发者的青睐。它基于Quill编辑器&#xff0c;Quill是一款现代的WYSIWYG&#xff08;所见即所得&#xff09;编辑器&#xff0c;…

GFS分布式文件系统概述以及集群部署

一.简介 GlusterFS 是一个开源的分布式文件系统。由存储服务器、客户端以及NFS/Samba存储网关(可选&#xff0c;根据需要选择使用)组成。没有元数据服务器组件&#xff0c;这有助于提升整个系统的性能、可靠性和稳定性。 传统的分布式文件系统大多通过元服务器来存储元数据&a…

嵌入式路由器:支持Vxlan功能,四大运营商网络

SR830-E系列产品&#xff0c;是集 4G/5G 网络、虚拟专用网等 技术于一体的物联网无线路由器产品。多DNN网络切片功能&#xff0c;满足行业应用差异化需求提供网络级的SLA保障及E2E安全隔离。该设备支持Vxlan功能&#xff0c;实际二层交换组网。为数据中心提供良好的解决方案。 …

西圣PK飞利浦PK漫步者开放式耳机值得选购吗?热门爆款品牌测评对比PK

开放式耳机因其独特的音质体验与佩戴舒适度&#xff0c;正逐渐成为消费者追求音乐品质与生活品质的重要选择&#xff0c;而在众多开放式耳机品牌中&#xff0c;万魔、飞利浦与漫步者在开放式耳机市场争议火热&#xff0c;这三大品牌开放式耳都值得购买吗&#xff1f;作为一个测…

C++进阶之路---何为智能指针?

顾得泉&#xff1a;个人主页 个人专栏&#xff1a;《Linux操作系统》 《C从入门到精通》 《LeedCode刷题》 键盘敲烂&#xff0c;年薪百万&#xff01; 一、为什么需要智能指针&#xff1f; 下面我们先分析一下下面这段程序有没有什么内存方面的问题&#xff1f;提示一下&am…

Z变换与传递函数代码化

对于自动控制而言&#xff0c;其关键在于传递函数方程&#xff0c;根据其特性设计出控制器&#xff0c;控制器也是S域的传递函数&#xff0c;那么如何将传递函数用代码的形式表现出来呢&#xff1f;以下将介绍这种工程方法 1、Z变换 对于一个确定的传递函数&#xff0c;如下 …