OpenCV实现普通阈值


Posted in Java/Android onNovember 17, 2021

普通阈值

阈值本质上就是对图像进行分割的一个过程。利用阈值二值化可对灰度或彩色图像进行像素数据分类。普通阈值即阈值二值化就是针对给定的图像,以T作为阈值进行分割的过程。在OpenCV中该类的实现依赖于threshold() 函数。下面是该函数的声明:

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

各参数解释

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

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

·thresh
表示阈值T。

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

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

其数学描述解释如下:

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

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

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

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

        Imgproc.threshold(src, dst, 150, 255, Imgproc.THRESH_BINARY);

        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 相关文章推荐
Win10系统下配置Java环境变量
Jun 13 Java/Android
浅析NIO系列之TCP
Jun 15 Java/Android
Java实现简易的分词器功能
Jun 15 Java/Android
gateway网关接口请求的校验方式
Jul 15 Java/Android
Sleuth+logback 设置traceid 及自定义信息方式
Jul 26 Java/Android
关于Spring配置文件加载方式变化引发的异常详解
Jan 18 Java/Android
Java实战之课程信息管理系统的实现
Apr 01 Java/Android
Android自定义scrollview实现回弹效果
Apr 01 Java/Android
IDEA 2022 Translation 未知错误 翻译文档失败
Apr 24 Java/Android
Java时间工具类Date的常用处理方法
May 25 Java/Android
Java Spring Boot请求方式与请求映射过程分析
Jun 25 Java/Android
SpringBoot详解自定义Stater的应用
Jul 15 Java/Android
聊聊Lombok中的@Builder注解使用教程
Nov 17 #Java/Android
springboot 多数据源配置不生效遇到的坑及解决
Nov 17 #Java/Android
深入解读Java三大集合之map list set的用法
详解JAVA的控制语句
Nov 11 #Java/Android
Java 实战项目之家居购物商城系统详解流程
Nov 11 #Java/Android
Java8中Stream的一些神操作
springboot如何接收application/x-www-form-urlencoded类型的请求
Nov 02 #Java/Android
You might like
php知道与问问的采集插件代码
2010/10/12 PHP
php中$_GET与$_POST过滤sql注入的方法
2014/11/03 PHP
php多重接口的实现方法
2015/06/20 PHP
总结PHP中初始化空数组的最佳方法
2019/02/13 PHP
jquery keypress,keyup,onpropertychange键盘事件
2010/06/25 Javascript
javascript自动改变文字大小和颜色的效果的小例子
2013/08/02 Javascript
jQuery中even选择器的定义和用法
2014/12/23 Javascript
jQuery地图map悬停显示省市代码分享
2015/08/20 Javascript
Jquery 分页插件之Jquery Pagination
2015/08/25 Javascript
原生js实现autocomplete插件
2016/04/14 Javascript
jQuery获取当前点击的对象元素(实现代码)
2016/05/19 Javascript
Javascript类型系统之String字符串类型详解
2016/06/21 Javascript
JS遍历页面所有对象属性及实现方法
2016/08/01 Javascript
前端JS面试中常见的算法问题总结
2016/12/23 Javascript
前端开发之CSS原理详解
2017/03/11 Javascript
微信小程序表单验证功能完整实例
2017/12/01 Javascript
JS 验证码功能的三种实现方式
2018/11/26 Javascript
Electron + vue 打包桌面操作流程详解
2019/06/24 Javascript
js单线程的本质 Event Loop解析
2019/10/29 Javascript
JS实现按比例缩小图片宽高
2020/08/24 Javascript
Vant Weapp组件踩坑:picker的初始赋值解决
2020/11/12 Javascript
一个计算身份证号码校验位的Python小程序
2014/08/15 Python
python制作企业邮箱的爆破脚本
2016/10/05 Python
python os.listdir按文件存取时间顺序列出目录的实例
2018/10/21 Python
python中如何实现将数据分成训练集与测试集的方法
2019/09/13 Python
opencv-python 读取图像并转换颜色空间实例
2019/12/09 Python
在jupyter notebook中调用.ipynb文件方式
2020/04/14 Python
python批量生成条形码的示例
2020/10/10 Python
CSS3中animation实现流光按钮效果
2020/12/21 HTML / CSS
戴森台湾线上商城:Dyson Taiwan
2018/05/21 全球购物
英国领先的票务代理商之一:The Ticket Factory
2019/02/09 全球购物
2014年留守儿童工作总结
2014/12/10 职场文书
董事长助理岗位职责
2015/02/11 职场文书
2015年社区国庆节活动总结
2015/07/30 职场文书
2016党员干部廉政准则学习心得体会
2016/01/20 职场文书
Python还能这么玩之用Python做个小游戏的外挂
2021/06/04 Python