OpenCV实现普通阈值


Posted in Java/Android onNovember 17, 2021

普通阈值

阈值本质上就是对图像进行分割的一个过程。利用阈值二值化可对灰度或彩色图像进行像素数据分类。普通阈值即阈值二值化就是针对给定的图像,以T作为阈值进行分割的过程。在OpenCV中该类的实现依赖于threshold() 函数。下面是该函数的声明:

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

各参数解释

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

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

·thresh
表示阈值T。

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

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

其数学描述解释如下:

对于给定的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 = thresholdOfBinary(filePath);

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

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

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

        Imgproc.threshold(src, dst, 150, 255, Imgproc.THRESH_BINARY);

        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 相关文章推荐
idea搭建可运行Servlet的Web项目
Jun 26 Java/Android
浅谈Python魔法方法
Jun 28 Java/Android
Java实现多文件上传功能
Jun 30 Java/Android
SpringBoot 拦截器妙用你真的了解吗
Jul 01 Java/Android
JavaWeb 入门篇:创建Web项目,Idea配置tomcat
Jul 16 Java/Android
springboot如何接收application/x-www-form-urlencoded类型的请求
Nov 02 Java/Android
使用HttpSessionListener监听器实战
Mar 17 Java/Android
使用Java去实现超市会员管理系统
Mar 18 Java/Android
Spring this调用当前类方法无法拦截的示例代码
Mar 20 Java/Android
零基础学java之方法的定义与调用详解
Apr 10 Java/Android
Java中Dijkstra(迪杰斯特拉)算法
May 20 Java/Android
Spring Cloud OAuth2实现自定义token返回格式
Jun 25 Java/Android
聊聊Lombok中的@Builder注解使用教程
Nov 17 #Java/Android
springboot 多数据源配置不生效遇到的坑及解决
Nov 17 #Java/Android
深入解读Java三大集合之map list set的用法
详解JAVA的控制语句
Nov 11 #Java/Android
Java 实战项目之家居购物商城系统详解流程
Nov 11 #Java/Android
Java8中Stream的一些神操作
springboot如何接收application/x-www-form-urlencoded类型的请求
Nov 02 #Java/Android
You might like
PHP+JS无限级可伸缩菜单详解(简单易懂)
2007/01/02 PHP
将文件夹压缩成zip文件的php代码
2009/12/14 PHP
php魔术方法与魔术变量、内置方法与内置变量的深入分析
2013/06/03 PHP
Thinkphp中Create方法深入探究
2014/06/16 PHP
yii实现创建验证码实例解析
2014/07/31 PHP
Yii框架学习笔记之session与cookie简单操作示例
2019/04/30 PHP
PHP文件上传小程序 适合初学者学习!
2019/05/23 PHP
javascript或asp实现的判断身份证号码是否正确两种验证方法
2009/11/26 Javascript
使用js判断控件是否获得焦点
2014/01/03 Javascript
JS中FRAME的操作问题实例分析
2014/10/21 Javascript
浅析jQuery EasyUI中的tree使用指南
2014/12/18 Javascript
浅谈JavaScript中的字符编码转换问题
2015/07/07 Javascript
浅谈JavaScript的Polymer框架中的事件绑定
2015/07/29 Javascript
详解jQuery中的empty、remove和detach
2016/04/11 Javascript
详解JS异步加载的三种方式
2017/03/07 Javascript
JSON与js对象序列化实例详解
2017/03/16 Javascript
详解微信小程序 登录获取unionid
2017/06/27 Javascript
jQuery 筛选器简单操作示例
2019/10/02 jQuery
Angular 多级路由实现登录页面跳转(小白教程)
2019/11/19 Javascript
node.js express捕获全局异常的三种方法实例分析
2019/12/27 Javascript
Python中的异常处理相关语句基础学习笔记
2016/07/11 Python
python实现图片批量压缩程序
2018/07/23 Python
Python图像处理之gif动态图的解析与合成操作详解
2018/12/30 Python
python实现倒计时小工具
2019/07/29 Python
Django 反向生成url实例详解
2019/07/30 Python
numpy.random.shuffle打乱顺序函数的实现
2019/09/10 Python
Python 如何优雅的将数字转化为时间格式的方法
2019/09/26 Python
python绘制玫瑰的实现代码
2020/03/02 Python
python3通过qq邮箱发送邮件以及附件
2020/05/20 Python
Python基于xlrd模块处理合并单元格
2020/07/28 Python
详解Django中的FBV和CBV对比分析
2021/03/01 Python
20年同学聚会感言
2014/02/03 职场文书
食品安全检查制度
2014/02/03 职场文书
分公司经理任命书
2014/06/05 职场文书
延安红色之旅心得体会
2014/10/07 职场文书
vue如何批量引入组件、注册和使用详解
2021/05/12 Vue.js