OpenCV实现反阈值二值化


Posted in Java/Android onNovember 17, 2021

反阈值二值化

反阈值二值化与阈值二值化互为逆操作。在OpenCV中该类的实现依赖于threshold() 函数。下面是该函数的声明:

threshold(src, dst, thresh, maxval, type);

各参数解释

·src
表示此操作的源(输入图像)的Mat对象。

·mat
表示目标(输出)图像的类Mat的对象。

·thresh
表示阈值T。

·maxval
表示最大灰度值,一般为255。

·type
表示要使用的阈值类型的整数类型变量,反阈值二值化为Imgproc.THRESH_BINARY_INV。

其数学描述解释如下:

对于给定的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 = thresholdOfNonBinary(filePath);

                    Platform.runLater(new Runnable() {
                        @Override
                        public void run() {
                            imageView.setImage(writableImage);
                        }
                    });

                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }).start();
    }
    
    private WritableImage thresholdOfNonBinary(String filePath) throws IOException {
        System.loadLibrary(Core.NATIVE_LIBRARY_NAME);

        Mat src = Imgcodecs.imread(filePath);
        Mat dst = new Mat();

        Imgproc.threshold(src, dst, 130, 255, Imgproc.THRESH_BINARY_INV);

        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 30 Java/Android
Java基础之this关键字的使用
Jun 30 Java/Android
解决SpringBoot文件上传临时目录找不到的问题
Jul 01 Java/Android
JUnit5常用注解的使用
Jul 02 Java/Android
详解JAVA的控制语句
Nov 11 Java/Android
你知道Java Spring的两种事务吗
Mar 16 Java/Android
java项目构建Gradle的使用教程
Mar 24 Java/Android
Dubbo+zookeeper搭配分布式服务的过程详解
Apr 03 Java/Android
详细介绍Java中的CyclicBarrier
Apr 13 Java/Android
Java数据结构之堆(优先队列)
May 20 Java/Android
Spring Cloud OpenFeign模版化客户端
Jun 25 Java/Android
java.util.NoSuchElementException原因及两种解决方法
Jun 28 Java/Android
聊聊SpringBoot自动装配的魔力
Nov 17 #Java/Android
Springboot如何同时装配两个相同类型数据库
Nov 17 #Java/Android
OpenCV实现普通阈值
聊聊Lombok中的@Builder注解使用教程
Nov 17 #Java/Android
springboot 多数据源配置不生效遇到的坑及解决
Nov 17 #Java/Android
深入解读Java三大集合之map list set的用法
详解JAVA的控制语句
Nov 11 #Java/Android
You might like
php将图片保存为不同尺寸图片的图片类实例
2015/03/30 PHP
php实现的操作excel类详解
2016/01/15 PHP
北京奥运官方网站幻灯切换效果flash版打包下载
2008/01/30 Javascript
Firefox window.close()的使用注意事项
2009/04/11 Javascript
浏览器的JavaScript引擎的识别方法
2013/10/20 Javascript
Ionic+AngularJS实现登录和注册带验证功能
2017/02/09 Javascript
js数字计算 误差问题的快速解决方法
2017/02/28 Javascript
es6中的解构赋值、扩展运算符和rest参数使用详解
2017/09/28 Javascript
Bootstrap table中toolbar新增条件查询及refresh参数使用方法
2018/05/18 Javascript
详解关于Vuex的action传入多个参数的问题
2019/02/22 Javascript
javscript 数组扁平化的实现
2020/02/03 Javascript
Vue如何将页面导出成PDF文件
2020/08/17 Javascript
[02:36]DOTA2上海特锦赛 回忆电竞生涯的重要瞬间
2016/03/25 DOTA
python将xml xsl文件生成html文件存储示例讲解
2013/12/03 Python
Linux下使用python自动修改本机网关代码分享
2015/05/21 Python
Python 中 Meta Classes详解
2016/02/13 Python
Python中定时任务框架APScheduler的快速入门指南
2017/07/06 Python
PySide和PyQt加载ui文件的两种方法
2019/02/27 Python
Python 实现输入任意多个数,并计算其平均值的例子
2019/07/16 Python
如何用Python来搭建一个简单的推荐系统
2019/08/07 Python
使用Python给头像加上圣诞帽或圣诞老人小图标附源码
2019/12/25 Python
pandas 强制类型转换 df.astype实例
2020/04/09 Python
django form和field具体方法和属性说明
2020/07/09 Python
基于python实现判断字符串是否数字算法
2020/07/10 Python
Python tkinter制作单机五子棋游戏
2020/09/14 Python
python Yaml、Json、Dict之间的转化
2020/10/19 Python
详解HTML5中CSS外观属性
2020/09/10 HTML / CSS
应届生求职信写作技巧
2013/10/24 职场文书
机械制造专业大学生自我鉴定
2014/09/19 职场文书
学习作风建设心得体会
2014/10/22 职场文书
护士长2014年度工作总结
2014/11/11 职场文书
离婚协议书范文2014(夫妻感情破裂)
2014/12/14 职场文书
2014个人年度工作总结范文
2014/12/24 职场文书
怎样写离婚协议书
2015/01/26 职场文书
2015年汽车销售经理工作总结
2015/04/27 职场文书
Python绘制散乱的点构成的图的方法
2022/04/21 Python