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 18 Java/Android
java中重写父类方法加不加@Override详解
Jun 21 Java/Android
Feign调用全局异常处理解决方案
Jun 24 Java/Android
Java常用工具类汇总 附示例代码
Jun 26 Java/Android
Spring中的使用@Async异步调用方法
Nov 01 Java/Android
java executor包参数处理功能 
Feb 15 Java/Android
SpringBoot中HttpSessionListener的简单使用方式
Mar 17 Java/Android
java后台调用接口及处理跨域问题的解决
Mar 24 Java/Android
springboot入门 之profile设置方式
Apr 04 Java/Android
Spring Boot项目传参校验的最佳实践指南
Apr 05 Java/Android
Java的Object类的九种方法
Apr 13 Java/Android
多线程Spring通过@Scheduled实现定时任务
May 25 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 多维数组排序(usort,uasort)
2010/06/30 PHP
解决文件名解压后乱码的问题 将文件名进行转码的代码
2012/01/10 PHP
php 下 html5 XHR2 + FormData + File API 上传文件操作实例分析
2020/02/28 PHP
PHP语言对接抖音快手小红书视频/图片去水印API接口源码
2020/08/11 PHP
发现的以前不知道的函数
2006/09/19 Javascript
ext监听事件方法[初级篇]
2008/04/27 Javascript
js 页面刷新location.reload和location.replace的区别小结
2009/12/24 Javascript
javascript:void(0)的问题使用探讨
2014/04/10 Javascript
jQuery validate插件实现ajax验证重复的2种方法
2016/01/22 Javascript
理解javascript中的MVC模式
2016/01/28 Javascript
jQuery实现TAB选项卡切换特效简单演示
2016/03/04 Javascript
js Canvas实现圆形时钟教程
2016/09/19 Javascript
Vue表单验证插件的制作过程
2017/04/01 Javascript
vue自定义filters过滤器
2018/04/26 Javascript
javascript实现考勤日历功能
2018/11/29 Javascript
vue element动态渲染、移除表单并添加验证的实现
2019/01/16 Javascript
探索JavaScript中私有成员的相关知识
2019/06/13 Javascript
vue element table中自定义一些input的验证操作
2020/07/18 Javascript
python切片的步进、添加、连接简单操作示例
2019/07/11 Python
django 自定义filter 判断if var in list的例子
2019/08/20 Python
python为QT程序添加图标的方法详解
2020/03/09 Python
Python3合并两个有序数组代码实例
2020/08/11 Python
详解基于Facecognition+Opencv快速搭建人脸识别及跟踪应用
2021/01/21 Python
Python .py生成.pyd文件并打包.exe 的注意事项说明
2021/03/04 Python
利用CSS3伪元素实现逐渐发光的方格边框
2017/05/07 HTML / CSS
基于Canvas+Vue的弹幕组件的实现
2019/07/23 HTML / CSS
html5实现canvas阴影效果示例
2014/05/07 HTML / CSS
html5中使用hotcss.js实现手机端自适配的方法
2020/04/23 HTML / CSS
Bulk Powders意大利:运动补充在线商店
2019/02/09 全球购物
Joseph官网:英国小众奢侈品牌
2019/05/17 全球购物
英国比较机场停车场网站:Airport Parking Essentials
2019/12/01 全球购物
涉外经济法专业毕业生推荐信
2013/11/24 职场文书
2014年五四青年节演讲稿范文
2014/04/22 职场文书
小学优秀学生评语
2014/12/29 职场文书
升学宴来宾致辞
2015/07/27 职场文书
扩展多台相同的Web服务器
2021/04/01 Servers