博客
关于我
opencv2 滑动条阈值分割
阅读量:816 次
发布时间:2019-03-26

本文共 2074 字,大约阅读时间需要 6 分钟。

使用滑动条调整阈值实践指南

在这一实践中,我们将学习如何通过滑动条来调整图像阈值,实现基于阈值的图像处理功能。作为一名技术人员,我将结合自己的经验和理解,带您逐步完成这一过程。

首先,我们需要了解什么是阈值。阈值在图像处理中是一种方法,用于通过设置一个特定的值,将图像中的某些部分处理为黑色或白色。常见的阈值类型有以下几种:THRESH_BINARY、THRESH_BINARY_INV、THRESH_TRUNC、THRESH_TOZERO 和 THRESH_TOZERO_INV。每一种类型都有不同的处理方式,这将在后续的回调函数中详细讲解。

在本次实践中,我们将使用OpenCV库来编写一个简单的图像处理程序。程序的主要步骤包括以下几个部分:

1. 包含必要的文件

首先,我们需要包含OpenCV的头文件以及必要的标准库文件。具体来说,我们会包含以下几部分:

代码部分:#include
#include
使用的宏和命名空间:using namespace cv; using namespace std;

2. 定义全局变量

为了让滑动条能够持续记住用户的设置,我们需要定义一些全局变量。这些变量包括阈值类型和具体的阈值值。具体来说,我们会定义以下变量:

代码部分:int g_nThresholdType = 3; int g_nThresholdValue = 100;
同时,我们还会定义一些Mat对象来存储原始图像、灰度图像以及处理后的结果图像。

3. 定义辅助函数

为了让用户了解如何使用程序,我们需要定义一个辅助函数called ShowHelpText()。这个函数会输出一些有用的帮助信息,包括阈值类型的说明和程序的使用说明。

代码部分:static void ShowHelpText() { ... }

4. 定义回调函数

在OpenCV中,滑动条的回调函数是用来处理滑动条的移动事件的。在我们的程序中,我们会定义一个名为on_Threshold的回调函数。这个函数会根据当前的阈值类型和阈值值,调用OpenCV的threshold函数来处理图像。

代码部分:void on_Threshold(int, void*)

5. 主函数实现

在main函数中,我们会执行以下几个步骤:

1. 读取原图:g_srcImage = imread("D:\\opencv_picture_test\\阈值处理\\硬币.png", 2|4);
2. 检查图像是否已经加载成功:如果图像加载失败,输出相应的错误信息并结束程序。
3. 将原图转换成灰度图:cvtColor(g_srcImage, g_grayImage, COLOR_RGB2GRAY);
4. 创建窗口并显示原图:imshow("原始图", g_srcImage);
5. 创建滑动条:createTrackbar("模式", WINDOW_NAME, &g_nThresholdType, 4, on_Threshold); createTrackbar("参数值", WINDOW_NAME, &g_nThresholdValue, 255, on_Threshold);
6. 初始化回调函数:on_Threshold(0,0);
7. 显示帮助信息:ShowHelpText();
8. 循环等待用户按下键:如果用户按下Escape键,则退出循环并结束程序。

6. 回调函数实现

在回调函数中,我们会根据当前设置的阈值值和类型,调用threshold函数来处理图像。然后,我们会显示处理后的图像。

代码部分:void on_Threshold(int, void*) { threshold(g_grayImage, g_dstImage, g_nThresholdValue, 255, g_nThresholdType); imshow(WINDOW_NAME, g_dstImage); }

7. 辅助函数实现

在ShowHelpText函数中,我们会输出一些帮助信息,帮助用户了解如何使用程序。

代码部分:void ShowHelpText() { printf("\n\n\n\tg_nThresholdType 参数有以下几种类型\n"); printf("\n\n\t0: THRESH_BINARY 当前点值大于阈值时,取Maxval, 也就是第四个参数,下面再不说明,否则设置为0\n"); ... }

总结

通过以上步骤,我们可以看到,实际编写一个基于阈值的滑动条程序并不复杂。我们需要做到的只是理解并正确使用OpenCV的各个函数和类,合理设计用户界面,并通过回调函数来实现函数的调用和图像处理。 gracias por prestar atención. :D

转载地址:http://dulyk.baihongyu.com/

你可能感兴趣的文章
Nginx配置如何一键生成
查看>>
Nginx配置实例-动静分离实例:搭建静态资源服务器
查看>>
Nginx配置实例-反向代理实例:根据访问的路径跳转到不同端口的服务中
查看>>
Nginx配置实例-负载均衡实例:平均访问多台服务器
查看>>
Nginx配置文件nginx.conf中文详解(总结)
查看>>
nginx配置详解、端口重定向和504
查看>>
Nginx配置负载均衡到后台网关集群
查看>>
Nginx配置限流,技能拉满!
查看>>
Nginx面试三连问:Nginx如何工作?负载均衡策略有哪些?如何限流?
查看>>
Nginx:NginxConfig可视化配置工具安装
查看>>
ngModelController
查看>>
ngrok | 内网穿透,支持 HTTPS、国内访问、静态域名
查看>>
ngrok内网穿透可以实现资源共享吗?快解析更加简洁
查看>>
NHibernate学习[1]
查看>>
NHibernate异常:No persister for的解决办法
查看>>
NIFI1.21.0_Mysql到Mysql增量CDC同步中_日期类型_以及null数据同步处理补充---大数据之Nifi工作笔记0057
查看>>
NIFI1.21.0_Mysql到Mysql增量CDC同步中_补充_更新时如果目标表中不存在记录就改为插入数据_Postgresql_Hbase也适用---大数据之Nifi工作笔记0059
查看>>
NIFI1.21.0_NIFI和hadoop蹦了_200G集群磁盘又满了_Jps看不到进程了_Unable to write in /tmp. Aborting----大数据之Nifi工作笔记0052
查看>>
NIFI1.21.0通过Postgresql11的CDC逻辑复制槽实现_指定表多表增量同步_增删改数据分发及删除数据实时同步_通过分页解决变更记录过大问题_02----大数据之Nifi工作笔记0054
查看>>
NIFI1.21.0通过Postgresql11的CDC逻辑复制槽实现_指定表或全表增量同步_实现指定整库同步_或指定数据表同步配置_04---大数据之Nifi工作笔记0056
查看>>