OpenCV实现反阈值二值化


Posted in Java/Android onNovember 17, 2021

反阈值二值化

反阈值二值化与阈值二值化互为逆操作。在OpenCV中该类的实现依赖于threshold() 函数。下面是该函数的声明:

threshold(src, dst, thresh, maxval, type);

各参数解释

·src
表示此操作的源(输入图像)的Mat对象。

·mat
表示目标(输出)图像的类Mat的对象。

·thresh
表示阈值T。

·maxval
表示最大灰度值,一般为255。

·type
表示要使用的阈值类型的整数类型变量,反阈值二值化为Imgproc.THRESH_BINARY_INV。

其数学描述解释如下:

对于给定的src(x,y),若其像素值大于阈值T(thresh),则其返回0,否则为为像素最大值。

OpenCV实现反阈值二值化

那么dst其像素描述如下:

OpenCV实现反阈值二值化

Java代码(JavaFX Controller层)

public class Controller{

    @FXML private Text fxText;
    @FXML private ImageView imageView;
    @FXML private Label resultLabel;

    @FXML public void handleButtonEvent(ActionEvent actionEvent) throws IOException {

        Node source = (Node) actionEvent.getSource();
        Window theStage = source.getScene().getWindow();
        FileChooser fileChooser = new FileChooser();
        FileChooser.ExtensionFilter extFilter = new FileChooser.ExtensionFilter("PNG files (*.png)", "*.png");
        fileChooser.getExtensionFilters().add(extFilter);
        fileChooser.getExtensionFilters().add(new FileChooser.ExtensionFilter("JPG Files(*.jpg)", "*.jpg"));
        File file = fileChooser.showOpenDialog(theStage);

        runInSubThread(file.getPath());

    }

    private void runInSubThread(String filePath){
        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    WritableImage writableImage = thresholdOfNonBinary(filePath);

                    Platform.runLater(new Runnable() {
                        @Override
                        public void run() {
                            imageView.setImage(writableImage);
                        }
                    });

                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }).start();
    }
    
    private WritableImage thresholdOfNonBinary(String filePath) throws IOException {
        System.loadLibrary(Core.NATIVE_LIBRARY_NAME);

        Mat src = Imgcodecs.imread(filePath);
        Mat dst = new Mat();

        Imgproc.threshold(src, dst, 130, 255, Imgproc.THRESH_BINARY_INV);

        MatOfByte matOfByte = new MatOfByte();
        Imgcodecs.imencode(".jpg", dst, matOfByte);

        byte[] bytes = matOfByte.toArray();
        InputStream in = new ByteArrayInputStream(bytes);
        BufferedImage bufImage = ImageIO.read(in);

        WritableImage writableImage = SwingFXUtils.toFXImage(bufImage, null);

        return writableImage;
    }

}

运行图

OpenCV实现反阈值二值化

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Java/Android 相关文章推荐
Java新手教程之ArrayList的基本使用
Jun 20 Java/Android
详解SpringBoot异常处理流程及原理
Jun 21 Java/Android
Java中PriorityQueue实现最小堆和最大堆的用法
Jun 27 Java/Android
springboot项目以jar包运行的操作方法
Jun 30 Java/Android
Java中多线程下载图片并压缩能提高效率吗
Jul 01 Java/Android
JUnit5常用注解的使用
Jul 02 Java/Android
关于MybatisPlus配置双数据库驱动连接数据库问题
Jan 22 Java/Android
mybatis源码解读之executor包语句处理功能
Feb 15 Java/Android
springboot入门 之profile设置方式
Apr 04 Java/Android
Flutter Navigator 实现路由传递参数
Apr 22 Java/Android
Java数据结构之堆(优先队列)
May 20 Java/Android
Android开发手册自定义Switch开关按钮控件
Jun 10 Java/Android
聊聊SpringBoot自动装配的魔力
Nov 17 #Java/Android
Springboot如何同时装配两个相同类型数据库
Nov 17 #Java/Android
OpenCV实现普通阈值
聊聊Lombok中的@Builder注解使用教程
Nov 17 #Java/Android
springboot 多数据源配置不生效遇到的坑及解决
Nov 17 #Java/Android
深入解读Java三大集合之map list set的用法
详解JAVA的控制语句
Nov 11 #Java/Android
You might like
php中文本数据翻页(留言本翻页)
2006/10/09 PHP
Zend studio for eclipse中使php可以调用mysql相关函数的设置方法
2008/10/13 PHP
ajax完美实现两个网页 分页功能的实例代码
2013/04/16 PHP
PHPMailer邮件发送的实现代码
2013/05/04 PHP
php lcg_value与mt_rand生成0~1随机小数的效果对比分析
2017/04/05 PHP
PHP中echo与print区别点整理
2021/03/09 PHP
javascript  Error 对象 错误处理
2008/05/18 Javascript
JavaScript Event事件学习第一章 Event介绍
2010/02/07 Javascript
有关于JS构造函数的重载和工厂方法
2013/04/07 Javascript
jquery实现微博文字输入框 输入时显示输入字数 效果实现
2013/07/12 Javascript
js获取当前路径的简单示例代码
2014/01/08 Javascript
jQuery animate easing使用方法图文详解
2016/06/17 Javascript
jquery属性,遍历,HTML操作方法详解
2016/09/17 Javascript
Bootstrap基本插件学习笔记之Popover提示框(19)
2016/12/08 Javascript
解决Vue使用mint-ui loadmore实现上拉加载与下拉刷新出现一个页面使用多个上拉加载后冲突问题
2017/11/07 Javascript
9种使用Chrome Firefox 自带调试工具调试javascript技巧
2017/12/22 Javascript
node.js博客项目开发手记
2018/03/16 Javascript
js实现自定义右键菜单
2020/05/18 Javascript
vue data有值,但是页面{{}} 取不到值的解决
2020/11/09 Javascript
[00:35]可解锁地面特效
2018/12/20 DOTA
浅析Python的web.py框架中url的设定方法
2016/07/11 Python
Django查询数据库的性能优化示例代码
2017/09/24 Python
python入门教程 python入门神图一张
2018/03/05 Python
Python中xml和dict格式转换的示例代码
2019/11/07 Python
Django 实现外键去除自动添加的后缀‘_id’
2019/11/15 Python
基于h5py的使用及数据封装代码
2019/12/26 Python
Python操作Sqlite正确实现方法解析
2020/02/05 Python
Python爬虫爬取电影票房数据及图表展示操作示例
2020/03/27 Python
英国家电购物网站:Sonic Direct
2019/03/26 全球购物
大专自我鉴定范文
2013/10/23 职场文书
应用数学自荐书范文
2013/11/24 职场文书
妇联领导班子剖析材料
2014/08/21 职场文书
鼋头渚导游词
2015/02/05 职场文书
教师素质教育心得体会
2016/01/19 职场文书
Windows server 2012 R2 安装IIS服务器
2022/04/29 Servers
MySQL导致索引失效的几种情况
2022/06/25 MySQL