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集成阿里云OSS上传文件系统教程
Jun 28 Java/Android
如何给HttpServletRequest增加消息头
Jun 30 Java/Android
springboot项目以jar包运行的操作方法
Jun 30 Java/Android
Java面试题冲刺第十九天--数据库(4)
Aug 07 Java/Android
Java异常处理try catch的基本用法
Dec 06 Java/Android
你知道Java Spring的两种事务吗
Mar 16 Java/Android
Java基于Dijkstra算法实现校园导游程序
Mar 17 Java/Android
java项目构建Gradle的使用教程
Mar 24 Java/Android
详解Flutter和Dart取消Future的三种方法
Apr 07 Java/Android
openGauss数据库JDBC环境连接配置的详细过程(Eclipse)
Jun 01 Java/Android
MyBatis在注解上使用动态SQL方式(@select使用if)
Jul 07 Java/Android
spring 项目实现限流方法示例
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
实用函数7
2007/11/08 PHP
php Http_Template_IT类库进行模板替换
2009/03/19 PHP
PHP学习笔记 IIS7下安装配置php环境
2012/10/29 PHP
Php header()函数语法及使用代码
2013/11/04 PHP
phpMyAdmin自动登录和取消自动登录的配置方法
2014/05/12 PHP
php中rename函数用法分析
2014/11/15 PHP
php中session与cookie的比较
2015/01/27 PHP
[原创]php获取数组中键值最大数组项的索引值
2015/03/17 PHP
php使用Jpgraph绘制饼状图的方法
2015/06/10 PHP
JS 表单验证大全
2011/11/23 Javascript
javascript匿名函数应用示例介绍
2014/03/07 Javascript
使用 TypeScript 重新编写的 JavaScript 坦克大战游戏代码
2015/04/07 Javascript
jQuery实现checkbox全选的方法
2015/06/10 Javascript
基于jquery实现人物头像跟随鼠标转动
2015/08/23 Javascript
常用的js方法合集
2017/03/10 Javascript
BootStrap Table 后台数据绑定、特殊列处理、排序功能
2017/05/27 Javascript
使用D3.js创建物流地图的示例代码
2018/01/27 Javascript
详解关于Vue2.0路由开启keep-alive时需要注意的地方
2018/09/18 Javascript
详解vue-cli3多环境打包配置
2019/03/28 Javascript
nodejs实现获取本地文件夹下图片信息功能示例
2019/06/22 NodeJs
vue监听用户输入和点击功能
2019/09/27 Javascript
JavaScript中break、continue和return的用法区别实例分析
2020/03/02 Javascript
[02:28]DOTA2 2017国际邀请赛小组赛回顾
2017/08/09 DOTA
Scrapy的简单使用教程
2017/10/24 Python
python enumerate函数的使用方法总结
2017/11/15 Python
Python pygame绘制文字制作滚动文字过程解析
2019/12/12 Python
html5标记文字_动力节点Java学院整理
2017/07/11 HTML / CSS
html2canvas生成的图片偏移不完整的解决方法
2020/05/19 HTML / CSS
给交警的表扬信
2014/01/12 职场文书
30年同学聚会邀请函
2014/01/25 职场文书
九年级化学教学反思
2014/01/28 职场文书
如何写自我鉴定
2014/03/19 职场文书
环保倡议书500字
2014/05/15 职场文书
激励员工的口号
2014/06/16 职场文书
2015年十月一日放假通知
2015/08/18 职场文书
Python中threading库实现线程锁与释放锁
2021/05/17 Python