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 相关文章推荐
解决Maven项目中 Invalid bound statement 无效的绑定问题
Jun 15 Java/Android
java固定大小队列的几种实现方式详解
Jul 15 Java/Android
dubbo服务整合zipkin详解
Jul 26 Java/Android
Java8利用Stream对列表进行去除重复的方法详解
Apr 14 Java/Android
Java 写一个简单的图书管理系统
Apr 26 Java/Android
Java8 CompletableFuture 异步回调
Apr 28 Java/Android
Android开发之底部导航栏的快速实现
Apr 28 Java/Android
Java Spring Lifecycle的使用
May 06 Java/Android
Java实现添加条码或二维码到Word文档
Jun 01 Java/Android
Java多线程并发FutureTask使用详解
Jun 28 Java/Android
java实现web实时消息推送的七种方案
Jul 23 Java/Android
基于Android10渲染Surface的创建过程
Aug 14 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 过滤英文标点符号及过滤中文标点符号代码
2014/06/12 PHP
Yii使用migrate命令执行sql语句的方法
2016/03/15 PHP
可以将word转成html的js代码
2010/04/11 Javascript
js change,propertychange,input事件小议
2011/12/20 Javascript
JavaScript将相对地址转换为绝对地址示例代码
2013/07/19 Javascript
Javascript基础教程之数据类型 (数值 Number)
2015/01/18 Javascript
Javascript实现Web颜色值转换
2015/02/05 Javascript
基于jquery实现的自动补全功能
2015/03/12 Javascript
Bootstrap每天必学之表单
2015/11/23 Javascript
JS中Eval解析JSON字符串的一个小问题
2016/02/21 Javascript
辨析JavaScript中的Undefined类型与null类型
2016/05/26 Javascript
Jquery on方法绑定事件后执行多次的解决方法
2016/06/02 Javascript
浅谈JavaScript中的apply/call/bind和this的使用
2017/02/26 Javascript
详解nodejs通过代理(proxy)发送http请求(request)
2017/09/22 NodeJs
微信小程序实现tab和swiper切换结合效果
2020/07/17 Javascript
网页爬虫之cookie自动获取及过期自动更新的实现方法
2018/03/06 Javascript
VUE实现强制渲染,强制更新
2019/10/29 Javascript
vue中el-input绑定键盘按键(按键修饰符)
2020/07/22 Javascript
Python实现的简单万年历例子分享
2014/04/25 Python
python实现得到一个给定类的虚函数
2014/09/28 Python
Python中使用Tkinter模块创建GUI程序实例
2015/01/14 Python
Python字典,函数,全局变量代码解析
2017/12/18 Python
python爬虫爬取微博评论案例详解
2019/03/27 Python
python zip,lambda,map函数代码实例
2020/04/04 Python
如何基于python实现不邻接植花
2020/05/01 Python
keras CNN卷积核可视化,热度图教程
2020/06/22 Python
python的setattr函数实例用法
2020/12/16 Python
聊聊python在linux下与windows下导入模块的区别说明
2021/03/03 Python
国际贸易专业个人求职信范文分享
2013/12/14 职场文书
端午节活动总结
2014/08/26 职场文书
迎国庆横幅标语
2014/10/08 职场文书
材料员岗位职责范本
2015/04/11 职场文书
庆祝教师节主题班会
2015/08/17 职场文书
《检阅》教学反思
2016/02/22 职场文书
励志正能量20句:送给所有为梦想拼搏的人
2019/11/11 职场文书
python使用shell脚本创建kafka连接器
2022/04/29 Python