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 相关文章推荐
源码解读Spring-Integration执行过程
Jun 11 Java/Android
spring cloud gateway中如何读取请求参数
Jul 15 Java/Android
Java SSM配置文件案例详解
Aug 30 Java/Android
详解JAVA的控制语句
Nov 11 Java/Android
你知道Java Spring的两种事务吗
Mar 16 Java/Android
SpringBoot2零基础到精通之异常处理与web原生组件注入
Mar 22 Java/Android
spring注解 @PropertySource配置数据源全流程
Mar 25 Java/Android
SpringBoot中获取profile的方法详解
Apr 08 Java/Android
Java实现简单小画板
Jun 10 Java/Android
Android移动应用开发指南之六种布局详解
Sep 23 Java/Android
Android实现获取短信验证码并自动填充
May 21 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与javascript对多项选择的处理
2006/10/09 PHP
php截取utf-8中文字符串乱码的解决方法
2010/03/29 PHP
Linux Apache PHP Oracle 安装配置(具体操作步骤)
2013/06/17 PHP
PHP zip扩展Linux下安装过程分享
2014/05/05 PHP
php表单请求获得数据求和示例
2014/05/15 PHP
destoon二次开发常用数据库操作
2014/06/21 PHP
PHP魔术引号所带来的安全问题分析
2014/07/15 PHP
php中array_unshift()修改数组key注意事项分析
2016/05/16 PHP
laravel实现图片上传预览,及编辑时可更换图片,并实时变化的例子
2019/11/14 PHP
JavaScript对象模型-执行模型
2008/04/28 Javascript
javascript通过class来获取元素实现代码
2013/02/20 Javascript
使用text方法获取Html元素文本信息示例
2014/09/01 Javascript
jQuery的bind()方法使用详解
2015/07/15 Javascript
Angularjs自定义指令实现三级联动 选择地理位置
2017/02/13 Javascript
ES6新数据结构Set与WeakSet用法分析
2017/03/31 Javascript
一个有意思的鼠标点击文字特效jquery代码
2017/09/23 jQuery
使用vue + less 实现简单换肤功能的示例
2018/02/21 Javascript
使用淘宝镜像cnpm安装Vue.js的图文教程
2018/05/17 Javascript
微信小程序自定义音乐进度条的实例代码
2018/08/28 Javascript
微信小程序缓存过期时间的使用详情
2019/05/12 Javascript
Angular之jwt令牌身份验证的实现
2020/02/14 Javascript
jQuery实现带进度条的轮播图
2020/09/13 jQuery
[02:10]探秘浦东源深体育馆 DOTA2 Supermajor不见不散
2018/05/17 DOTA
python控制windows剪贴板,向剪贴板中写入图片的实例
2018/05/31 Python
使用Python计算玩彩票赢钱概率
2019/06/26 Python
Django密码系统实现过程详解
2019/07/19 Python
使用python计算三角形的斜边例子
2020/04/15 Python
css3新增颜色表示方式分享
2014/04/15 HTML / CSS
GANT葡萄牙官方商店:拥有美国运动服传统的生活方式品牌
2018/10/18 全球购物
美国室内盆栽植物购买网站:Plants.com
2020/04/24 全球购物
《蓝色的树叶》教学反思
2014/02/24 职场文书
辞旧迎新演讲稿
2014/09/15 职场文书
小学班主任事迹材料
2014/12/17 职场文书
经理岗位职责范本
2015/04/15 职场文书
观看禁毒宣传片后的感想
2015/08/11 职场文书
Java+swing实现抖音上的表白程序详解
2022/06/25 Java/Android