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 相关文章推荐
Win10系统下配置Java环境变量
Jun 13 Java/Android
Java实现斗地主之洗牌发牌
Jun 14 Java/Android
Spring Boot 启动、停止、重启、状态脚本
Jun 26 Java/Android
Spring整合Mybatis的全过程
Jun 28 Java/Android
Spring Boot两种全局配置和两种注解的操作方法
Jun 29 Java/Android
mybatis 解决从列名到属性名的自动映射失败问题
Jun 30 Java/Android
spring cloud gateway中如何读取请求参数
Jul 15 Java/Android
JVM钩子函数的使用场景详解
Aug 23 Java/Android
springboot+zookeeper实现分布式锁
Mar 21 Java/Android
Java由浅入深通关抽象类与接口(下篇)
Apr 26 Java/Android
Java服务调用RestTemplate与HttpClient的使用详解
Jun 21 Java/Android
Java实现字符串转为驼峰格式的方法详解
Jul 07 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下把数组保存为文件格式的实例应用
2010/02/08 PHP
php利用事务处理转账问题
2015/04/22 PHP
Android AsyncTack 异步任务实例详解
2016/11/02 PHP
laravel解决迁移文件一次删除创建字段报错的问题
2019/10/24 PHP
linux mint下安装phpstorm2020包括JDK部分的教程详解
2020/09/17 PHP
JavaScipt中的Math.ceil() 、Math.floor() 、Math.round() 三个函数的理解
2010/04/29 Javascript
Js setInterval与setTimeout(定时执行与循环执行)的代码(可以传入参数)
2010/06/11 Javascript
Javascript计算时间差的函数分享
2011/07/04 Javascript
JQuery获取或设置ckeditor的数据(示例代码)
2013/11/15 Javascript
angularJS结合canvas画图例子
2015/02/09 Javascript
JS根据生日算年龄的方法
2015/05/05 Javascript
干货分享:让你分分钟学会javascript闭包
2015/12/25 Javascript
JavaScript代码因逗号不规范导致IE不兼容的问题
2016/02/25 Javascript
jQuery中使用animate自定义动画的方法
2016/05/29 Javascript
Vue 实现分页与输入框关键字筛选功能
2020/01/02 Javascript
vue-cli 关闭热更新操作
2020/09/18 Javascript
详解Python中的type()方法的使用
2015/05/21 Python
Python列表切片操作实例总结
2019/02/19 Python
使用selenium和pyquery爬取京东商品列表过程解析
2019/08/15 Python
Python文本文件的合并操作方法代码实例
2020/03/31 Python
Pycharm激活方法及详细教程(详细且实用)
2020/05/12 Python
Django+Celery实现动态配置定时任务的方法示例
2020/05/26 Python
python简单实现9宫格图片实例
2020/09/03 Python
Pandas的数据过滤实现
2021/01/15 Python
用HTML5的canvas实现一个炫酷时钟效果
2016/05/20 HTML / CSS
超市营业员求职简历的自我评价
2013/10/17 职场文书
计算机专业毕业生求职信分享
2013/12/24 职场文书
文艺晚会主持词
2014/03/24 职场文书
2014年母亲节演讲稿范文
2014/05/07 职场文书
揭牌仪式策划方案
2014/05/28 职场文书
党员个人年度总结
2015/02/14 职场文书
2015社区健康教育工作总结
2015/05/20 职场文书
灵魂歌王观后感
2015/06/17 职场文书
2019最新公司租房合同(例文)
2019/07/18 职场文书
一文搞懂Python Sklearn库使用
2021/08/23 Python
Python面试不修改数组找出重复的数字
2022/05/20 Python