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 相关文章推荐
java Nio使用NioSocket客户端与服务端交互实现方式
Jun 15 Java/Android
spring项目中切面及AOP的使用方法
Jun 26 Java/Android
分析并发编程之LongAdder原理
Jun 29 Java/Android
mybatis中sql语句CDATA标签的用法说明
Jun 30 Java/Android
SpringBoot读取Resource下文件的4种方法
Jul 02 Java/Android
java解析XML详解
Jul 09 Java/Android
SpringMVC 整合SSM框架详解
Aug 30 Java/Android
Java使用JMeter进行高并发测试
Nov 23 Java/Android
SpringDataJPA在Entity中常用的注解介绍
Dec 06 Java/Android
关于MybatisPlus配置双数据库驱动连接数据库问题
Jan 22 Java/Android
Java虚拟机内存结构及编码实战分享
Apr 07 Java/Android
Android中View.post和Handler.post的关系
Jun 05 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
WindowsXP中快速配置Apache+PHP5+Mysql
2008/06/05 PHP
PHP入门经历和学习过程分享
2014/04/11 PHP
ThinkPHP之N方法实例详解
2014/06/20 PHP
CodeIgniter配置之SESSION用法实例分析
2016/01/19 PHP
JavaScript设置FieldSet展开与收缩
2009/05/15 Javascript
如何让页面加载完成后执行js
2013/06/26 Javascript
javascript学习笔记之10个原生技巧
2014/05/21 Javascript
javascript基本包装类型介绍
2015/04/10 Javascript
星期几的不同脚本写法(推荐)
2016/06/01 Javascript
Javascript将JSON日期格式化
2016/08/23 Javascript
javascript中this用法实例详解
2017/04/06 Javascript
JavaScript使用ZeroClipboard操作剪切板
2017/05/10 Javascript
Angular4自制一个市县二级联动组件示例
2017/11/21 Javascript
vue项目中api接口管理总结
2018/04/20 Javascript
vue awesome swiper异步加载数据出现的bug问题
2018/07/03 Javascript
在vue中获取token,并将token写进header的方法
2018/09/26 Javascript
Vue实现回到顶部和底部动画效果
2019/07/31 Javascript
JS实现可视化音频效果的实例代码
2020/01/16 Javascript
VUE Elemen-ui之穿梭框使用方法详解
2021/01/19 Javascript
ubuntu系统下 python链接mysql数据库的方法
2017/01/09 Python
Pycharm学习教程(3) 代码运行调试
2017/05/03 Python
Django的性能优化实现解析
2019/07/30 Python
Python之Matplotlib文字与注释的使用方法
2020/06/18 Python
pytorch 常用函数 max ,eq说明
2020/06/28 Python
浅谈three.js中的needsUpdate的应用
2012/11/12 HTML / CSS
Theflamel意大利:女士奢华服装、鞋子和配件
2020/01/11 全球购物
用JAVA SOCKET编程,读服务器几个字符,再写入本地显示
2012/11/25 面试题
经典c++面试题三
2015/07/08 面试题
财务会计专业毕业生自荐信
2013/10/19 职场文书
个人简历自我评价
2014/02/02 职场文书
教师个人自我评价范文
2014/04/13 职场文书
我爱读书演讲稿
2014/05/07 职场文书
统计专业自荐书
2014/07/06 职场文书
离婚协议书范文
2015/01/26 职场文书
监理中标通知书
2015/04/16 职场文书
利用Python第三方库实现预测NBA比赛结果
2021/06/21 Python