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 相关文章推荐
解决tk mapper 通用mapper的bug问题
Jun 16 Java/Android
浅谈什么是SpringBoot异常处理自动配置的原理
Jun 21 Java/Android
Java常用函数式接口总结
Jun 29 Java/Android
详解Spring事件发布与监听机制
Jun 30 Java/Android
Spring中bean的生命周期之getSingleton方法
Jun 30 Java/Android
SpringBoot工程下使用OpenFeign的坑及解决
Jul 02 Java/Android
java协程框架quasar和kotlin中的协程对比分析
Feb 24 Java/Android
MybatisPlus EntityWrapper如何自定义SQL
Mar 22 Java/Android
SpringBoot中使用Redis作为全局锁示例过程
Mar 24 Java/Android
SpringBoot中获取profile的方法详解
Apr 08 Java/Android
java高级用法JNA强大的Memory和Pointer
Apr 19 Java/Android
springboot创建的web项目整合Quartz框架的项目实践
Jun 21 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
提问的智慧
2006/10/09 PHP
Zend Studio (eclipse)使用速度优化方法
2011/03/23 PHP
php实现微信企业号支付个人的方法详解
2017/07/26 PHP
jQuery Flash/MP3/Video多媒体插件
2010/01/18 Javascript
jquery 倒计时效果实现秒杀思路
2013/09/11 Javascript
js中opener与parent的区别详细解析
2014/01/14 Javascript
七个很有意思的PHP函数
2014/05/12 Javascript
jQuery插件HighCharts绘制2D柱状图、折线图的组合双轴图效果示例【附demo源码下载】
2017/03/09 Javascript
Bootstrap与Angularjs的模态框实例代码
2017/08/03 Javascript
jQuery实现的简单图片轮播效果完整示例
2018/02/08 jQuery
jQuery实现为动态添加的元素绑定事件实例分析
2018/09/07 jQuery
解决v-for中使用v-if或者v-bind:class失效的问题
2018/09/25 Javascript
性能优化篇之Webpack构建速度优化的建议
2019/04/03 Javascript
详解vue-cli3多页应用改造
2019/06/04 Javascript
深入学习JavaScript 高阶函数
2019/06/11 Javascript
element中的$confirm的使用
2020/04/26 Javascript
Python原始字符串(raw strings)用法实例
2014/10/13 Python
MySQL最常见的操作语句小结
2015/05/07 Python
Python装饰器(decorator)定义与用法详解
2018/02/09 Python
详解python运行三种方式
2019/05/13 Python
python中bytes和str类型的区别
2019/10/21 Python
Python常用扩展插件使用教程解析
2020/11/02 Python
老生常谈CSS中的长度单位
2016/06/27 HTML / CSS
实例讲解HTML5的meta标签的一些应用
2015/12/08 HTML / CSS
美国隐形眼镜销售网站:ContactsDirect
2017/10/28 全球购物
Hotter Shoes英国官网:英伦风格,舒适的鞋子
2017/12/28 全球购物
Manduka官网:瑜伽垫、瑜伽毛巾和服装
2018/07/02 全球购物
俄罗斯首家面向中国消费者的一站式购物网站:Wruru
2020/05/08 全球购物
会计电算化毕业生自荐信
2014/03/03 职场文书
学校就业推荐信范文
2014/05/19 职场文书
工地质量标语
2014/06/12 职场文书
招标授权委托书样本
2014/09/23 职场文书
成品仓库管理员岗位职责
2015/04/09 职场文书
一小时学会TensorFlow2之基本操作2实例代码
2021/09/04 Python
《遗弃》开发商删推文要跑路?官方回应:还在开发
2022/04/03 其他游戏
JS轻量级函数式编程实现XDM三
2022/06/16 Javascript