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 相关文章推荐
springboot中一些比较常用的注解总结
Jun 11 Java/Android
Java实战之用Swing实现通讯录管理系统
Jun 13 Java/Android
Java实现简易的分词器功能
Jun 15 Java/Android
分析Java中Map的遍历性能问题
Jun 26 Java/Android
Java实现房屋出租系统详解
Oct 05 Java/Android
Java tomcat手动配置servlet详解
Nov 27 Java/Android
Spring Security使用单点登录的权限功能
Apr 03 Java/Android
java如何实现获取客户端ip地址的示例代码
Apr 07 Java/Android
Java8利用Stream对列表进行去除重复的方法详解
Apr 14 Java/Android
Android自定义双向滑动控件
Apr 19 Java/Android
Spring Data JPA框架Repository自定义实现
Apr 28 Java/Android
利用正则表达式匹配浮点型数据
May 30 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求正负数数组中连续元素最大值示例
2014/04/11 PHP
PHP删除数组中特定元素的两种方法
2019/02/28 PHP
从父页面读取和操作iframe中内容方法
2009/07/25 Javascript
JS 操作符整理[推荐收藏]
2011/11/15 Javascript
鼠标移到导航当前位置的LI变色处于选中状态
2013/08/23 Javascript
JavaScript对表格或元素按文本,数字或日期排序的方法
2015/05/26 Javascript
jQuery实现ctrl+enter(回车)提交表单
2015/10/19 Javascript
浅谈js构造函数的方法与原型prototype
2016/07/04 Javascript
JQuery Ajax WebService传递参数的简单实例
2016/11/02 Javascript
Vue异步组件使用详解
2017/04/08 Javascript
浅谈React + Webpack 构建打包优化
2018/01/23 Javascript
vue实现word,pdf文件的导出功能
2018/07/31 Javascript
Iview Table组件中各种组件扩展的使用
2018/10/20 Javascript
详解在微信小程序的JS脚本中使用Promise来优化函数处理
2019/03/06 Javascript
inquirer.js一个用户与命令行交互的工具详解
2019/05/18 Javascript
详细分析python3的reduce函数
2017/12/05 Python
Tornado Web Server框架编写简易Python服务器
2018/07/28 Python
Django如何开发简单的查询接口详解
2019/05/17 Python
利用selenium爬虫抓取数据的基础教程
2019/06/10 Python
Python大数据之使用lxml库解析html网页文件示例
2019/11/16 Python
python中提高pip install速度
2020/02/14 Python
python3中的logging记录日志实现过程及封装成类的操作
2020/05/12 Python
美国设计师精美珠宝购物网:Netaya
2016/08/28 全球购物
荷兰本土平价百货:HEMA
2017/10/23 全球购物
计算机相关的自我评价
2014/01/15 职场文书
药品促销活动方案
2014/02/14 职场文书
新学期国旗下演讲稿
2014/05/08 职场文书
三八红旗手先进事迹材料
2014/05/13 职场文书
基层党组织整改方案
2014/10/25 职场文书
2014年乡镇民政工作总结
2014/12/02 职场文书
2014年高数考试作弊检讨书
2014/12/14 职场文书
2015教师个人工作总结范文
2015/03/31 职场文书
环保守法证明
2015/06/24 职场文书
大学开学典礼新闻稿
2015/07/17 职场文书
《秋思》教学反思
2016/02/23 职场文书
如何利用python实现列表嵌套字典取值
2022/06/10 Python