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内存模型之happens-before概念详解
Jun 13 Java/Android
MybatisPlus代码生成器的使用方法详解
Jun 13 Java/Android
详解JAVA中的OPTIONAL
Jun 14 Java/Android
eclipse创建项目没有dynamic web的解决方法
Jun 24 Java/Android
spring boot中nativeQuery的用法
Jul 26 Java/Android
Java面试题冲刺第十九天--数据库(4)
Aug 07 Java/Android
关于Mybatis中SQL节点的深入解析
Mar 19 Java/Android
Java对文件的读写操作方法
Apr 29 Java/Android
JAVA springCloud项目搭建流程
May 11 Java/Android
Spring中的@Transactional的工作原理
Jun 05 Java/Android
Java完整实现记事本代码
Jun 16 Java/Android
Java+swing实现抖音上的表白程序详解
Jun 25 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
为什么那些咖啡爱好者大多看不上连锁咖啡店?
2021/03/06 咖啡文化
用PHP控制用户的浏览器--ob*函数的使用说明
2007/03/16 PHP
php下过滤HTML代码的函数
2007/12/10 PHP
PHP计算日期相差天数实例分析
2016/02/23 PHP
php通过会话控制实现身份验证实例
2016/10/18 PHP
js模拟实现Array的sort方法
2007/12/11 Javascript
兼容最新firefox、chrome和IE的javascript图片预览实现代码
2014/08/08 Javascript
jquery实现从数组移除指定的值
2015/06/24 Javascript
JS实现带关闭功能的阿里妈妈网站顶部滑出banner工具条代码
2015/09/17 Javascript
跟我学习javascript的严格模式
2015/11/16 Javascript
JS控件bootstrap suggest plugin使用方法详解
2017/03/25 Javascript
Bootstrap标签页(Tab)插件切换echarts不显示问题的解决
2018/07/13 Javascript
对类Vue的MVVM前端库的实现代码
2018/09/07 Javascript
使用electron实现百度网盘悬浮窗口功能的示例代码
2018/10/24 Javascript
微信小程序与webview交互实现支付功能
2019/06/07 Javascript
node 文件上传接口的转发的实现
2019/09/23 Javascript
详细分析JavaScript中的深浅拷贝
2020/09/17 Javascript
[04:09]2018年度DOTA2社区贡献奖-完美盛典
2018/12/16 DOTA
Python封装shell命令实例分析
2015/05/05 Python
socket + select 完成伪并发操作的实例
2017/08/15 Python
Python2实现的LED大数字显示效果示例
2017/09/04 Python
Python flask框架post接口调用示例
2019/07/03 Python
详解Django admin高级用法
2019/11/06 Python
Python 类的魔法属性用法实例分析
2019/11/21 Python
django数据模型(Model)的字段类型解析
2019/12/25 Python
Jupyter notebook快速入门教程(推荐)
2020/05/18 Python
html5本地存储_动力节点Java学院整理
2017/07/12 HTML / CSS
HTML5 Canvas实现放大镜效果示例
2020/03/25 HTML / CSS
美国婚礼装饰和活动用品批发供应商:Event Decor Direct
2018/10/12 全球购物
Converse匡威法国官网:美国著名帆布鞋品牌
2018/12/05 全球购物
美国传奇滑手Paul Rodriguez创办的街头滑板品牌:Primitive Skateboarding
2019/10/29 全球购物
简历上的自我评价
2014/02/03 职场文书
出纳会计岗位职责
2014/03/12 职场文书
Vue全家桶入门基础教程
2021/05/14 Vue.js
matplotlib画混淆矩阵与正确率曲线的实例代码
2021/06/01 Python
mysql sum(if())和count(if())的用法说明
2022/01/18 MySQL