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中Collection的一些常用方法总结
Jun 13 Java/Android
HashMap实现保存两个key相同的数据
Jun 30 Java/Android
SpringRetry重试框架的具体使用
Jul 25 Java/Android
关于Mybatis中SQL节点的深入解析
Mar 19 Java/Android
关于EntityWrapper的in用法
Mar 22 Java/Android
Java 使用类型为Object的变量指向任意类型的对象
Apr 13 Java/Android
java高级用法JNA强大的Memory和Pointer
Apr 19 Java/Android
Android自定义双向滑动控件
Apr 19 Java/Android
利用正则表达式匹配浮点型数据
May 30 Java/Android
Spring中的@Transactional的工作原理
Jun 05 Java/Android
解决spring.thymeleaf.cache=false不起作用的问题
Jun 10 Java/Android
Spring Security动态权限的实现方法详解
Jun 16 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 PDO中文乱码解决办法
2009/07/20 PHP
ThinkPHP的模版中调用session数据的方法
2014/07/01 PHP
PHP解码unicode编码的中文字符代码分享
2014/08/13 PHP
PHP实现简单实用的分页类代码
2016/04/08 PHP
Yii2 GridView实现列表页直接修改数据的方法
2016/05/16 PHP
Laravel jwt 多表(多用户端)验证隔离的实现
2019/12/18 PHP
form中限制文本字节数js代码
2007/06/10 Javascript
防止网站内容被拷贝的一些方法与优缺点好处与坏处分析
2007/11/30 Javascript
IE php关于强制下载文件的代码
2008/08/23 Javascript
location.search在客户端获取Url参数的方法
2010/06/08 Javascript
基于jquery的返回顶部效果(兼容IE6)
2011/01/17 Javascript
GRID拖拽行的实例代码
2013/07/18 Javascript
用js来获取上传的文件名纯粹是为了美化而用
2013/10/23 Javascript
js实现div的切换特效上一个下一个
2014/02/11 Javascript
使用phantomjs进行网页抓取的实现代码
2014/09/29 Javascript
javascript实现table选中的行以指定颜色高亮显示的方法
2015/05/13 Javascript
jQuery的remove()方法使用详解
2015/08/11 Javascript
JavaScript实现购物车基本功能
2017/07/21 Javascript
js中Array对象的常用遍历方法详解
2019/01/17 Javascript
微信小程序之下拉列表实现方法解析(附完整源码)
2019/08/23 Javascript
layui 数据表格 点击分页按钮 监听事件的实例
2019/09/02 Javascript
vue实现前端分页完整代码
2020/06/17 Javascript
javascript canvas封装动态时钟
2020/09/30 Javascript
Vue中用JSON实现刷新界面不影响倒计时
2020/10/26 Javascript
浅谈vue.watch的触发条件是什么
2020/11/07 Javascript
python在控制台输出进度条的方法
2015/06/20 Python
python使用pycharm环境调用opencv库
2018/02/11 Python
Python求一批字符串的最长公共前缀算法示例
2019/03/02 Python
Python OpenCV读取显示视频的方法示例
2020/02/20 Python
Harrods英国:世界领先的奢侈品百货商店
2020/09/23 全球购物
标记环网Toke Ring IEEE802.5
2014/05/26 面试题
英文求职信范文
2014/05/23 职场文书
应聘教师求职信
2014/07/19 职场文书
公务员上班玩游戏检讨书
2014/09/17 职场文书
巾帼标兵事迹材料
2014/12/26 职场文书
幼儿园中秋节活动总结
2015/03/23 职场文书