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 18 Java/Android
Java常用函数式接口总结
Jun 29 Java/Android
ObjectMapper 如何忽略字段大小写
Jun 29 Java/Android
使用Springboot实现健身房管理系统
Jul 01 Java/Android
spring boot中nativeQuery的用法
Jul 26 Java/Android
Java tomcat手动配置servlet详解
Nov 27 Java/Android
关于MybatisPlus配置双数据库驱动连接数据库问题
Jan 22 Java/Android
你知道Java Spring的两种事务吗
Mar 16 Java/Android
Java实战之课程信息管理系统的实现
Apr 01 Java/Android
Java 深入探究讲解简单工厂模式
Apr 07 Java/Android
Java的Object类的九种方法
Apr 13 Java/Android
tree shaking对打包体积优化及作用
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
PHP+XML 制作简单的留言本 图文教程
2009/11/02 PHP
php实现有序数组打印或排序的方法【附Python、C及Go语言实现代码】
2016/11/10 PHP
用ADODB.Stream转换
2007/01/22 Javascript
juqery 学习之三 选择器 简单 内容
2010/11/25 Javascript
JavaScript快速检测浏览器对CSS3特性的支持情况
2012/09/26 Javascript
不使用jquery实现js打字效果示例分享
2014/01/19 Javascript
原生js编写设为首页兼容ie、火狐和谷歌
2014/06/05 Javascript
js实现可得到不同颜色值的颜色选择器实例
2015/02/28 Javascript
Jquery ajax 同步阻塞引起的UI线程阻塞问题
2015/11/17 Javascript
jQuery实现的鼠标经过时变宽的效果(附demo源码)
2016/04/28 Javascript
JavaScript中return用法示例
2016/11/29 Javascript
echarts整合多个类似option的方法实例
2018/07/10 Javascript
vue环形进度条组件实例应用
2018/10/10 Javascript
vue draggable resizable gorkys与v-chart使用与总结
2019/09/05 Javascript
简单使用webpack打包文件的实现
2019/10/29 Javascript
python根据list重命名文件夹里的所有文件实例
2018/10/25 Python
10 行Python 代码实现 AI 目标检测技术【推荐】
2019/06/14 Python
python爬虫 模拟登录人人网过程解析
2019/07/31 Python
Django多数据库配置及逆向生成model教程
2020/03/28 Python
python获得命令行输入的参数的两种方式
2020/11/02 Python
CSS3让登陆面板3D旋转起来
2016/05/03 HTML / CSS
AmazeUI图片轮播效果的示例代码
2020/08/20 HTML / CSS
租租车:国际租车、美国租车、欧洲租车、特价预订国外租车(中文服务)
2018/03/28 全球购物
诺心蛋糕官网:LE CAKE
2018/08/25 全球购物
"火柴棍式"程序员面试题
2014/03/16 面试题
介绍一下XMLHttpRequest对象
2012/02/12 面试题
法学专业个人求职信
2013/09/26 职场文书
搞笑婚礼主持词
2014/03/13 职场文书
小学教师师德承诺书
2014/05/23 职场文书
教师师德师风整改措施
2014/10/24 职场文书
学生会招新宣传语
2015/07/13 职场文书
导游词之云南丽江古城
2019/09/17 职场文书
Nginx反向代理多个服务器的实现方法
2021/03/31 Servers
python 调用js的四种方式
2021/04/11 Python
如何使用vue3打造一个物料库
2021/05/08 Vue.js
Appium中scroll和drag_and_drop根据元素位置滑动
2022/02/15 Python