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 相关文章推荐
MybatisPlus代码生成器的使用方法详解
Jun 13 Java/Android
Java并发编程之Executor接口的使用
Jun 21 Java/Android
简单总结SpringMVC拦截器的使用方法
Jun 28 Java/Android
Jackson 反序列化时实现大小写不敏感设置
Jun 29 Java/Android
spring cloud 配置中心客户端启动遇到的问题
Sep 25 Java/Android
SpringCloud之@FeignClient()注解的使用方式
Sep 25 Java/Android
详解Flutter网络请求Dio库的使用及封装
Apr 14 Java/Android
Spring Boot 使用 Spring-Retry 进行重试框架
Apr 24 Java/Android
Springboot中如何自动转JSON输出
Jun 16 Java/Android
Java实现注册登录跳转
Jun 16 Java/Android
SpringBoot项目部署到阿里云服务器的实现步骤
Jun 28 Java/Android
SpringBoot项目多数据源及mybatis 驼峰失效的问题解决方法
Jul 07 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
一些星际专用术语解释
2020/03/04 星际争霸
PHP执行批量mysql语句的解决方法
2013/05/02 PHP
探讨Smarty中如何获取数组的长度以及smarty调用php函数的详解
2013/06/20 PHP
PHP利用header跳转失效的解决方法
2014/10/24 PHP
详解PHP的Yii框架中日志的相关配置及使用
2015/12/08 PHP
简单谈谈PHP中的Reload操作
2016/12/12 PHP
PHP使用HTML5 FileApi实现Ajax上传文件功能示例
2019/07/01 PHP
读jQuery之二(两种扩展)
2011/06/11 Javascript
jquery动画2.元素坐标动画效果(创建一个图片走廊)
2012/08/24 Javascript
javascript实现全角半角检测的方法
2015/07/23 Javascript
JavaScript中在光标处插入添加文本标签节点的详细方法
2017/03/22 Javascript
JS+HTML5 FileReader对象用法示例
2017/04/07 Javascript
为jquery的ajax请求添加超时timeout时间的操作方法
2018/09/04 jQuery
JS如何获取地址栏的参数实例讲解
2018/10/06 Javascript
详解从NodeJS搭建中间层再谈前后端分离
2018/11/13 NodeJs
JavaScript类的继承操作实例总结
2018/12/20 Javascript
element-ui table span-method(行合并)的实现代码
2018/12/20 Javascript
零基础之Node.js搭建API服务器的详解
2019/03/08 Javascript
Vue 处理表单input单行文本框的实例代码
2019/05/09 Javascript
Python读取图片为16进制表示简单代码
2018/01/19 Python
python脚本实现验证码识别
2018/06/07 Python
复化梯形求积分实例——用Python进行数值计算
2019/11/20 Python
JupyterNotebook 输出窗口的显示效果调整实现
2020/09/22 Python
python代码实现图书管理系统
2020/11/30 Python
Python自动化测试基础必备知识点总结
2021/02/07 Python
移动端适配 使px自动转换rem
2019/08/26 HTML / CSS
英国羊绒服装购物网站:Pure Collection
2018/10/22 全球购物
C语言中break与continue的区别
2012/07/12 面试题
学前教育求职自荐信范文
2013/12/25 职场文书
学生党员思想汇报
2013/12/28 职场文书
激情洋溢的毕业生就业求职信
2014/03/15 职场文书
工程售后服务方案
2014/06/08 职场文书
2014客服代表实习自我鉴定
2014/09/18 职场文书
大学生入党群众意见书
2015/06/02 职场文书
向Spring IOC 容器动态注册bean实现方式
2022/07/15 Java/Android
Sentry的安装、配置、使用教程(Sentry日志手机系统)
2022/07/23 Python