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 相关文章推荐
JVM入门之类加载与字节码技术(类加载与类的加载器)
Jun 15 Java/Android
springboot如何初始化执行sql语句
Jun 22 Java/Android
Java实现多线程聊天室
Jun 26 Java/Android
解决Jenkins集成SonarQube遇到的报错问题
Jul 15 Java/Android
gateway与spring-boot-starter-web冲突问题的解决
Jul 16 Java/Android
Java获取e.printStackTrace()打印的信息方式
Aug 07 Java/Android
springmvc直接不经过controller访问WEB-INF中的页面问题
Feb 24 Java/Android
Java8利用Stream对列表进行去除重复的方法详解
Apr 14 Java/Android
Java8 CompletableFuture 异步回调
Apr 28 Java/Android
Java时间工具类Date的常用处理方法
May 25 Java/Android
Java实现贪吃蛇游戏的示例代码
Sep 23 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实现搜索时记住状态的方法示例
2018/05/11 PHP
PHP输出Excel PHPExcel的方法
2018/07/26 PHP
PHP从零开始打造自己的MVC框架之入口文件实现方法详解
2019/06/03 PHP
js同时按下两个方向键
2007/12/01 Javascript
Ajax,UTF-8还是GB2312 eval 还是execScript
2008/11/13 Javascript
基于jQuery的星级评分插件
2011/08/12 Javascript
页面图片浮动左右滑动效果的简单实现案例
2014/02/10 Javascript
在JavaScript中构建ArrayList示例代码
2014/09/17 Javascript
深入分析jquery解析json数据
2014/12/09 Javascript
javascript递归回溯法解八皇后问题
2015/04/22 Javascript
js判断日期时间有效性的方法
2015/10/24 Javascript
JS实现网页上随滚动条滚动的层效果代码
2015/11/04 Javascript
实例详解jQuery表单验证插件validate
2016/01/18 Javascript
Vue监听数组变化源码解析
2017/03/09 Javascript
Angular 作用域scope的具体使用
2017/12/11 Javascript
Vue中如何实现proxy代理
2018/04/20 Javascript
async/await地狱该如何避免详解
2018/05/10 Javascript
layui实现数据表格table分页功能(ajax异步)
2019/07/27 Javascript
vue3修改link标签默认icon无效问题详解
2019/10/09 Javascript
[02:27]DOTA2英雄基础教程 莱恩
2014/01/17 DOTA
python多线程http下载实现示例
2013/12/30 Python
Python初学时购物车程序练习实例(推荐)
2017/08/08 Python
Python设计模式之解释器模式原理与用法实例分析
2019/01/10 Python
Python&&GDAL实现NDVI的计算方式
2020/01/09 Python
python logging 日志的级别调整方式
2020/02/21 Python
解决Django中checkbox复选框的传值问题
2020/03/31 Python
python/golang实现循环链表的示例代码
2020/09/14 Python
Python调用REST API接口的几种方式汇总
2020/10/19 Python
Static Nested Class 和 Inner Class的不同
2013/11/28 面试题
中学教师实习自我鉴定
2013/09/28 职场文书
毕业留言寄语大全
2014/04/10 职场文书
个人工作表现评价材料
2014/09/21 职场文书
2015年仓管员工作总结
2015/04/21 职场文书
vue项目两种方式实现竖向表格的思路分析
2021/04/28 Vue.js
Vue.js中v-for指令的用法介绍
2022/03/13 Vue.js
开发者首先否认《遗弃》被取消的传言
2022/04/11 其他游戏