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实现简易的分词器功能
Jun 15 Java/Android
详解Java ES多节点任务的高效分发与收集实现
Jun 30 Java/Android
JavaGUI模仿QQ聊天功能完整版
Jul 04 Java/Android
spring cloud gateway中如何读取请求参数
Jul 15 Java/Android
dubbo集成zipkin获取Traceid的实现
Jul 26 Java/Android
Java日常练习题,每天进步一点点(38)
Jul 26 Java/Android
关于springboot配置druid数据源不生效问题(踩坑记)
Sep 25 Java/Android
Android Flutter实现3D动画效果示例详解
Apr 07 Java/Android
Android开发之WECHAT微信小程序路由跳转的两种形式
Apr 12 Java/Android
Java实现带图形界面的聊天程序
Jun 10 Java/Android
springboot实现string转json json里面带数组
Jun 16 Java/Android
java实现web实时消息推送的七种方案
Jul 23 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
Windows下安装Memcached的步骤说明
2010/04/25 PHP
PHP中Restful api 错误提示返回值实现思路
2016/04/12 PHP
TP5(thinkPHP5)框架基于ajax与后台数据交互操作简单示例
2018/09/03 PHP
php使用curl模拟多线程实现批处理功能示例
2019/07/25 PHP
jquery获取input表单值的代码
2010/04/19 Javascript
防止页面被iframe(兼容IE,Firefox火狐)
2010/07/04 Javascript
JavaScript实现两个Table固定表头根据页面大小自行调整
2014/01/03 Javascript
node.js中的fs.readFileSync方法使用说明
2014/12/15 Javascript
7个让JavaScript变得更好的注意事项
2015/01/28 Javascript
jQuery实现不断闪烁文字的方法
2015/05/15 Javascript
JavaScript中Math.SQRT2属性的使用详解
2015/06/14 Javascript
浅析JavaScript声明变量
2015/12/21 Javascript
浅谈JS原生Ajax,GET和POST
2016/06/08 Javascript
老生常谈ES6中的类
2017/07/31 Javascript
详解webpack打包后如何调试的方法步骤
2018/11/07 Javascript
使用jQuery实现掷骰子游戏
2019/10/24 jQuery
python基础教程之字典操作详解
2014/03/25 Python
python按照多个字符对字符串进行分割的方法
2015/03/17 Python
Python的Flask框架中的Jinja2模板引擎学习教程
2016/06/30 Python
Python生成器定义与简单用法实例分析
2018/04/30 Python
Python实现决策树C4.5算法的示例
2018/05/30 Python
python中多个装饰器的执行顺序详解
2018/10/08 Python
详解Python with/as使用说明
2018/12/13 Python
python傅里叶变换FFT绘制频谱图
2019/07/19 Python
python django下载大的csv文件实现方法分析
2019/07/19 Python
基于Python2、Python3中reload()的不同用法介绍
2019/08/12 Python
SmartBuyGlasses中国:唯视良品(销售名牌太阳镜、墨镜和眼镜框)
2017/07/03 全球购物
极简鞋类,赤脚的感觉:Lems Shoes
2019/08/06 全球购物
数控专业大学生的自我鉴定
2013/11/13 职场文书
小学生作文评语大全
2014/04/21 职场文书
租车协议书范本
2014/04/22 职场文书
第二批党的群众路线教育实践活动个人整改方案
2014/10/31 职场文书
群众路线四风对照检查材料
2014/11/04 职场文书
投资合作意向书范本
2015/05/08 职场文书
导游词之广西漓江
2019/11/02 职场文书
Java并发编程必备之Future机制
2021/06/30 Java/Android