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 相关文章推荐
浅谈什么是SpringBoot异常处理自动配置的原理
Jun 21 Java/Android
Java基础-封装和继承
Jul 02 Java/Android
spring boot中nativeQuery的用法
Jul 26 Java/Android
Java面试题冲刺第十九天--数据库(4)
Aug 07 Java/Android
Spring Security中用JWT退出登录时遇到的坑
Oct 16 Java/Android
关于EntityWrapper的in用法
Mar 22 Java/Android
MybatisPlus EntityWrapper如何自定义SQL
Mar 22 Java/Android
JAVA长虹键法之建造者Builder模式实现
Apr 10 Java/Android
java中为什么说子类的构造方法默认访问的是父类的无参构造方法
Apr 13 Java/Android
Java对文件的读写操作方法
Apr 29 Java/Android
java实现web实时消息推送的七种方案
Jul 23 Java/Android
Spring Boot 的创建和运行示例代码详解
Jul 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+xslt在windows平台上
2006/10/09 PHP
php版微信数据统计接口用法示例
2016/10/12 PHP
php适配器模式简单应用示例
2019/10/23 PHP
for 循环性能比较 提高for循环的效率
2009/03/19 Javascript
关于js datetime的那点事
2011/11/15 Javascript
jquery Moblie入门—hello world的示例代码学习
2013/01/08 Javascript
jQuery控制iFrame(实例代码)
2013/11/19 Javascript
css结合js制作下拉菜单示例代码
2014/02/27 Javascript
理解javascript回调函数
2014/12/28 Javascript
node.js中的forEach()是同步还是异步呢
2015/01/29 Javascript
jQuery实现感应鼠标动画效果自动伸长的输入框实例
2015/02/24 Javascript
js实现跨域的多种方法
2015/12/25 Javascript
vue.js开发环境搭建教程
2017/05/04 Javascript
vue系列之动态路由详解【原创】
2017/09/10 Javascript
浅谈vuex 闲置状态重置方案
2018/01/04 Javascript
js动态添加表格逐行添加、删除、遍历取值的实例代码
2018/01/25 Javascript
react native基于FlatList下拉刷新上拉加载实现代码示例
2018/09/30 Javascript
详解Bootstrap 学习(一)入门
2019/04/12 Javascript
vue 中Virtual Dom被创建的方法
2019/04/15 Javascript
js尾调用优化的实现
2019/05/23 Javascript
npm的lock机制解析
2019/06/20 Javascript
解决vue admin element noCache设置无效的问题
2019/11/12 Javascript
[04:32]玩具屠夫中文语音节选
2020/08/23 DOTA
Python 转换文本编码实现解析
2019/08/27 Python
15行Python代码实现免费发送手机短信推送消息功能
2020/02/27 Python
Django实现前台上传并显示图片功能
2020/05/29 Python
荷兰街头时尚之家:Funkie House
2019/03/18 全球购物
英国时尚泳装品牌:Maru Swimwear
2019/10/06 全球购物
俄语翻译实习生的自我评价分享
2013/11/06 职场文书
介绍信如何写
2015/01/31 职场文书
超市收银员岗位职责
2015/04/07 职场文书
医药公司开票员岗位职责
2015/04/15 职场文书
教师培训简讯
2015/07/20 职场文书
2015年初中教务处工作总结
2015/07/21 职场文书
2016年大学生社会实践心得体会
2015/10/09 职场文书
如何理解PHP核心特性命名空间
2021/05/28 PHP