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
详解SpringBoot异常处理流程及原理
Jun 21 Java/Android
解决ObjectMapper.convertValue() 遇到的一些问题
Jun 30 Java/Android
如何给HttpServletRequest增加消息头
Jun 30 Java/Android
Java反应式框架Reactor中的Mono和Flux
Jul 25 Java/Android
SpringBoot整合RabbitMQ的5种模式实战
Aug 02 Java/Android
mybatis中注解与xml配置的对应关系和对比分析
Aug 04 Java/Android
Dubbo+zookeeper搭配分布式服务的过程详解
Apr 03 Java/Android
Java8 Stream API 提供了一种高效且易于使用的处理数据的方式
Apr 13 Java/Android
Java 多线程协作作业之信号同步
May 11 Java/Android
SpringBoot使用ip2region获取地理位置信息的方法
Jun 21 Java/Android
maven 解包依赖项中的文件的解决方法
Jul 15 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中文本操作的类
2007/03/17 PHP
php实现paypal 授权登录
2015/05/28 PHP
在Laravel框架里实现发送邮件实例(邮箱验证)
2016/05/20 PHP
php 删除指定文件夹的实例讲解
2017/07/25 PHP
JS中Iframe之间传值的方法
2013/03/11 Javascript
JS获得URL超链接的参数值实例代码
2013/06/21 Javascript
JavaScript面对国际化编程时的一些建议
2015/06/24 Javascript
JS+CSS实现DIV层的展开、收缩效果
2016/01/28 Javascript
Javascript数组Array方法解读
2016/03/13 Javascript
简单实现js页面切换功能
2021/01/10 Javascript
微信小程序 WebSocket详解及应用
2017/01/21 Javascript
微信小程序 页面跳转如何实现传值
2017/04/05 Javascript
原生js封装添加class,删除class的实例
2017/11/06 Javascript
jQuery zTree 异步加载添加子节点重复问题
2017/11/29 jQuery
利用vue组件自定义v-model实现一个Tab组件方法示例
2017/12/06 Javascript
JS浏览器BOM常见操作实例详解
2020/04/27 Javascript
JS 设计模式之:单例模式定义与实现方法浅析
2020/05/06 Javascript
[01:09:24]Ti4开幕式
2014/07/19 DOTA
python提取页面内url列表的方法
2015/05/25 Python
python 简单的多线程链接实现代码
2016/08/28 Python
python字符串过滤性能比较5种方法
2017/06/22 Python
python的pytest框架之命令行参数详解(下)
2019/06/27 Python
python zip()函数使用方法解析
2019/10/31 Python
python多线程实现同时执行两个while循环的操作
2020/05/02 Python
Python unittest生成测试报告过程解析
2020/09/08 Python
python批量提取图片信息并保存的实现
2021/02/05 Python
Python Pygame实现俄罗斯方块
2021/02/19 Python
10分钟入门CSS3 Animation
2018/12/25 HTML / CSS
俄罗斯品牌服装和鞋子的在线商店:KUPIVIP
2019/10/27 全球购物
硅酸盐工业控制专业应届生求职信
2013/11/02 职场文书
四年的大学生生活自我评价
2013/12/09 职场文书
《学棋》教后反思
2014/04/14 职场文书
企业党支部工作总结2015
2015/05/21 职场文书
刑事上诉状(无罪)
2015/05/23 职场文书
Linux安装Nginx步骤详解
2021/03/31 Servers
分析Netty直接内存原理及应用
2021/06/14 Java/Android