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 相关文章推荐
浅谈什么是SpringBoot异常处理自动配置的原理
Jun 21 Java/Android
解决SpringCloud Feign传对象参数调用失败的问题
Jun 23 Java/Android
深入理解java.lang.String类的不可变性
Jun 27 Java/Android
mybatis 解决从列名到属性名的自动映射失败问题
Jun 30 Java/Android
Lombok的详细使用及优缺点总结
Jul 15 Java/Android
Spring Security使用单点登录的权限功能
Apr 03 Java/Android
Spring Cloud Netflix 套件中的负载均衡组件 Ribbon
Apr 13 Java/Android
Java由浅入深通关抽象类与接口(上篇)
Apr 26 Java/Android
Spring Data JPA框架持久化存储数据到数据库
Apr 28 Java/Android
Spring Data JPA框架自定义Repository接口
Apr 28 Java/Android
Android开发EditText禁止输入监听及InputFilter字符过滤
Jun 10 Java/Android
HttpClient实现表单提交上传文件
Aug 14 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 实现进制转换(二进制、八进制、十六进制)互相转换实现代码
2010/10/22 PHP
深入PHP5中的魔术方法详解
2013/06/17 PHP
THINKPHP内容分页代码分享
2015/01/14 PHP
ThinkPHP、ZF2、Yaf、Laravel框架路由大比拼
2015/03/25 PHP
php语言中使用json的技巧及json的实现代码详解
2015/10/27 PHP
CI框架源码解读之URI.php中_fetch_uri_string()函数用法分析
2016/05/18 PHP
thinkPHP5实现的查询数据库并返回json数据实例
2017/10/23 PHP
laravel框架邮箱认证实现方法详解
2019/11/22 PHP
yii 框架实现按天,月,年,自定义时间段统计数据的方法分析
2020/04/04 PHP
javascript比较文档位置
2008/04/08 Javascript
基于jquery的仿百度搜索框效果代码
2011/04/11 Javascript
js substring从右边获取指定长度字符串(示例代码)
2013/12/23 Javascript
嵌入式iframe子页面与父页面js通信的方法
2015/01/20 Javascript
JavaScript中获取纯正的undefined的方法
2016/03/06 Javascript
浅析在javascript中创建对象的各种模式
2016/05/06 Javascript
BootStrap智能表单实战系列(十一)级联下拉的支持
2016/06/13 Javascript
JavaScript文件的同步和异步加载的实现代码
2017/08/19 Javascript
JS实现评价的星星功能
2017/08/20 Javascript
使用D3.js创建物流地图的示例代码
2018/01/27 Javascript
为vue-router懒加载时下载js的过程中添加loading提示避免无响应问题
2018/04/03 Javascript
vue+iview 实现可编辑表格的示例代码
2018/10/31 Javascript
详解vue项目中使用token的身份验证的简单实践
2019/03/08 Javascript
Python中使用Boolean操作符做真值测试实例
2015/01/30 Python
Python打印斐波拉契数列实例
2015/07/07 Python
Python中工作日类库Busines Holiday的介绍与使用
2017/07/06 Python
基于python select.select模块通信的实例讲解
2017/09/21 Python
python 随机打乱 图片和对应的标签方法
2018/12/14 Python
在python中利用最小二乘拟合二次抛物线函数的方法
2018/12/29 Python
如何利用python进行时间序列分析
2020/08/04 Python
windows+vscode安装paddleOCR运行环境的步骤
2020/11/11 Python
机电专业毕业生推荐信
2013/11/10 职场文书
2014年科协工作总结
2014/12/09 职场文书
2014年扶贫帮困工作总结
2014/12/09 职场文书
师德师风心得体会(2016精选篇)
2016/01/12 职场文书
九年级英语教学反思
2016/02/15 职场文书
励志正能量20句:送给所有为梦想拼搏的人
2019/11/11 职场文书