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如何使用logback实现多环境配置?
Jun 16 Java/Android
Java如何实现树的同构?
Jun 22 Java/Android
Spring整合Mybatis的全过程
Jun 28 Java/Android
Jackson 反序列化时实现大小写不敏感设置
Jun 29 Java/Android
Java 泛型详解(超详细的java泛型方法解析)
Jul 02 Java/Android
Spring Cloud Gateway去掉url前缀
Jul 15 Java/Android
springboot集成springCloud中gateway时启动报错的解决
Jul 16 Java/Android
java调用Restful接口的三种方法
Aug 23 Java/Android
spring cloud 配置中心客户端启动遇到的问题
Sep 25 Java/Android
Java 深入探究讲解简单工厂模式
Apr 07 Java/Android
Android 界面一键变灰 深色主题工具类
Apr 28 Java/Android
Java多线程并发FutureTask使用详解
Jun 28 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中通过正则表达式下载内容中的远程图片的函数代码
2012/01/10 PHP
PHP中将网页导出为Word文档的代码
2012/05/25 PHP
php创建sprite
2014/02/11 PHP
PHP获取文件扩展名的4种方法
2015/11/24 PHP
javascript网页关键字高亮代码
2008/07/30 Javascript
window.opener用法和用途实例介绍
2013/08/19 Javascript
Js实现双击鼠标自动滚动屏幕的示例代码
2013/12/14 Javascript
jQuery实现简单的日期输入格式化控件
2015/03/12 Javascript
基于JavaScript实现移动端TAB触屏切换效果
2015/10/20 Javascript
javascript正则表达式之分组概念与用法实例
2016/06/16 Javascript
微信小程序 wxapp视图容器 view详解
2016/10/31 Javascript
jquery表单提交带错误信息提示效果
2017/03/09 Javascript
AngularJS与BootStrap模仿百度分页的示例代码
2018/05/23 Javascript
使用JavaScript实现node.js中的path.join方法
2018/08/12 Javascript
了解前端理论:rscss和rsjs
2019/05/23 Javascript
IE11下CKEditor在Bootstrap Modal中下拉问题的解决
2019/09/25 Javascript
vue实现节点增删改功能
2019/09/26 Javascript
原生js实现商品筛选功能
2019/10/28 Javascript
Javascript如何递归遍历本地文件夹
2020/08/06 Javascript
vue中使用router全局守卫实现页面拦截的示例
2020/10/23 Javascript
实用的 vue tags 创建缓存导航的过程实现
2020/12/03 Vue.js
[41:52]2018DOTA2亚洲邀请赛3月29日小组赛B组Effect VS Secret
2018/03/30 DOTA
linux系统使用python监测系统负载脚本分享
2014/01/15 Python
Python里隐藏的“禅”
2014/06/16 Python
Python实现带百分比的进度条
2016/06/28 Python
Python下实现的RSA加密/解密及签名/验证功能示例
2017/07/17 Python
Python中函数eval和ast.literal_eval的区别详解
2017/08/10 Python
Python AES加密实例解析
2018/01/18 Python
PyQt 图解Qt Designer工具的使用方法
2019/08/06 Python
python离线安装外部依赖包的实现
2020/02/13 Python
在keras里实现自定义上采样层
2020/06/28 Python
HTML块级标签汇总(小篇)
2016/07/13 HTML / CSS
健康监测猫砂:Pretty Litter
2017/05/25 全球购物
瑞士最大的图书贸易公司:Orell Füssli
2019/12/28 全球购物
在校实习生求职信
2014/06/18 职场文书
先进员工事迹材料
2014/12/20 职场文书