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 中用了热部署神器 JRebel 之后,开发效率提升了 10(真棒)
Jun 26 Java/Android
Spring Data JPA的Audit功能审计数据库的变更
Jun 26 Java/Android
Java基础之详解HashSet的使用方法
Jun 30 Java/Android
解决ObjectMapper.convertValue() 遇到的一些问题
Jun 30 Java/Android
Java Kafka 消费积压监控的示例代码
Jul 01 Java/Android
springboot集成springCloud中gateway时启动报错的解决
Jul 16 Java/Android
Java实现房屋出租系统详解
Oct 05 Java/Android
springboot如何接收application/x-www-form-urlencoded类型的请求
Nov 02 Java/Android
springmvc直接不经过controller访问WEB-INF中的页面问题
Feb 24 Java/Android
springboot用户数据修改的详细实现
Apr 06 Java/Android
Java 垃圾回收超详细讲解记忆集和卡表
Apr 08 Java/Android
Mybatis-Plus 使用 @TableField 自动填充日期
Apr 26 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 字符串操作入门教程
2006/12/06 PHP
PHP和XSS跨站攻击的防范
2007/04/17 PHP
php 数组元素快速去重
2017/05/05 PHP
php支付宝系列之电脑网站支付
2018/05/30 PHP
PHP 7.4中使用预加载的方法详解
2019/07/08 PHP
Laravel5.1 框架Middleware中间件基本用法实例分析
2020/01/04 PHP
javascript克隆对象深度介绍
2012/11/20 Javascript
javascript loadScript异步加载脚本示例讲解
2013/11/14 Javascript
jQuery+CSS3实现3D立方体旋转效果
2015/11/10 Javascript
JavaScript中的ParseInt("08")和“09”返回0的原因分析及解决办法
2016/05/19 Javascript
bootstrapValidator表单验证插件学习
2016/12/30 Javascript
jquery PrintArea 实现票据的套打功能(代码)
2017/03/17 Javascript
原生javascript实现分页效果
2017/04/21 Javascript
JavaScript模板引擎实现原理实例详解
2018/12/14 Javascript
在vue中高德地图引入和轨迹的绘制的实现
2019/10/11 Javascript
vue中使用elementUI组件手动上传图片功能
2019/12/13 Javascript
用javascript实现倒计时效果
2021/02/09 Javascript
Django中cookie的基本使用方法示例
2018/02/03 Python
人生苦短我用python python如何快速入门?
2018/03/12 Python
如何使用Python 打印各种三角形
2019/06/28 Python
pandas 使用均值填充缺失值列的小技巧分享
2019/07/04 Python
Python 硬币兑换问题
2019/07/29 Python
详解在Python中以绝对路径或者相对路径导入文件的方法
2019/08/30 Python
解决keras GAN训练是loss不发生变化,accuracy一直为0.5的问题
2020/07/02 Python
html5跨域通讯之postMessage的用法总结
2013/11/07 HTML / CSS
全球500多个机场的接送服务:Suntransfers
2019/06/03 全球购物
美国价格实惠的在线眼镜网站:Zeelool
2020/12/25 全球购物
Java基础面试题
2014/07/19 面试题
一道Delphi面试题
2016/10/28 面试题
经济管理专业求职信
2014/06/09 职场文书
戒毒悔改检讨书
2014/09/21 职场文书
幼儿园教师师德表现自我评价
2015/03/05 职场文书
爱心捐赠活动简讯
2015/07/20 职场文书
同学会演讲稿
2019/04/02 职场文书
浏览器常用基本操作之python3+selenium4自动化测试(基础篇3)
2021/05/21 Python
详解SQL报错盲注
2022/07/23 SQL Server