一、阈值化操作

1、阈值滑动条:

createTrackbar使用方法及步骤

第一个参数:conststring& trackbarname,表示轨迹条的名字
第二个参数:conststring& winname,表示轨迹条依托窗口的名称
Threshold_Demo:是回调函数,实时返回。

2、阈值函数:

threshold(gray_dst, dst2, threshold_value, threshold_max, THRESH_BINARY);
gray_dst:原图像
threshold_value:阈值
threshold_max:最大值,一般为255
type:
cv2.THRESH_BINARY:二值化,超过阈值的像素设置为max,不超过的设置为0
cv2.THRESH_BINARY_INV:反二值化,不超过阈值的设置为max,超过的设置为0
cv2.THRESH_TRUNC:截断,超过阈值的设置为threshold
cv2.THRESH_TOZERO:低于阈值的设置为0
cv2.THRESH_TOZERO_INV:低于阈值的设置为max
#include<opencv2/opencv.hpp>
#include<iostream>
#include<math.h>
using namespace std;
using namespace cv;Mat src, dst, dst2, gray_dst;
int threshold_value = 127;
int threshold_max = 255;
const char* output = "binary image";
void Threshold_Demo(int, void*);
int main()
{src = imread("D:/PT/circle_stone.jpg");if (!src.data) {printf("could not load the image...\n");return  -1;}double scale = 0.5;Size dsize = Size(src.cols * scale, src.rows * scale);resize(src, dst, dsize);//为图像创建边框//copyMakeBorder(dst, dst2, 20, 20, 20, 20, cv::BORDER_CONSTANT, Scalar(116, 73, 16));//阈值化操作namedWindow("input", CV_WINDOW_AUTOSIZE);namedWindow(output, CV_WINDOW_AUTOSIZE);imshow("input", dst);createTrackbar("阈值滑条:", output, &threshold_value, threshold_max, Threshold_Demo);//imwrite("D:/PT/shan/shan12345.jpg",dst2);Threshold_Demo(0, 0);waitKey(0);return 0;
}
void Threshold_Demo(int, void*) {cvtColor(dst, gray_dst, CV_BGR2GRAY);threshold(gray_dst, dst2, threshold_value, threshold_max, THRESH_BINARY);imshow(output, dst2);}



注:这里可以暂停思考一下,为什么阈值拉低,黑色逐渐减少,白色逐渐增多。
cv2.THRESH_BINARY_INV:反二值化:

3、OTSU算法(大津法)

什么是大津法?
大津法是一种图像灰度自适应的阈值分割算法,又称作最大类间方差法,因为按照大津法求得的阈值进行图像二值化分割后,前景与背景图像的类间方差最大

它被认为是图像分割中阈值选取的最佳算法,计算简单,不受图像亮度和对比度的影响,因此在数字图像处理上得到了广泛的应用。它是按图像的灰度特性,将图像分成背景和前景两部分。因方差是灰度分布均匀性的一种度量,背景和前景之间的类间方差越大,说明构成图像的两部分的差别越大,当部分前景错分为背景或部分背景错分为前景都会导致两部分差别变小。因此,使类间方差最大的分割意味着错分概率最小。

应用:是求图像全局阈值的最佳方法,应用不言而喻,适用于大部分需要求图像全局阈值的场合。

优点:计算简单快速,不受图像亮度和对比度的影响。

缺点:对图像噪声敏感;只能针对单一目标分割;当目标和背景大小比例悬殊、类间方差函数可能呈现双峰或者多峰,这个时候效果不好。



代码链接:C++实现Otsu(大津法)
OpenCV学堂公众号链接:二值化算法OTSU源码解析

4、自适应阈值二值化

为什么要提出自适应呢?
对于色彩均匀的图像,一个阈值就可以完成,但是色彩不均匀,图像光照变暗了,单阈值的二值化效果就会大大折扣。

自适应阈值可以使用变换的阈值,通过计算每个像素点临近区域的加权平均值获得阈值,然后处理。这个方法可以更好地处理明暗差异较低的图像。

OpenCV提供的API:

void adaptiveThreshold(InputArray src, OutputArray dst, double maxValue,int adaptiveMethod, int thresholdType, int blockSize, double C)

src:源图像,8位单通道图像。

adaptiveMethod:在一个邻域内计算阈值所采用的算法,分别为:

ADAPTIVE_THRESH_MEAN_C (邻域所有像素点的权重值是一致的)-double C
ADAPTIVE_THRESH_GAUSSIAN_C (与邻域各个像素点到中心的距离有关,通过高斯方程得到各个点的权重值)-double c

thresholdType:

THRESH_BINARY
THRESH_BINARY_INV

blockSize:adaptiveThreshold的计算单位是像素的邻域块,这是局部邻域大小,3、5、7…

double C:偏移值调整量.

【OpenCv】阈值操作(超详细)相关推荐

  1. java hmget 最大值,【Redis】基本数据类型及命令操作(超详细)

    一.String 可以直接看每一大节的命令示例部分,敲一遍就大体会了 1.1 概述 字符串类型是Redis中最为基础的数据存储类型,它在Redis中是二进制安全的,这便意味着该类型可以接受任何格式的数 ...

  2. Date日期类型相加减操作(超详细)

    前言 Date类型的时间操作我们在日常开发中经常使用,也会经常使用Date类型的数据进行相加减等操作,下面给大家介绍一种比较常见通用的工具类操作Date类型的实现日期加减 思想 将Date类型转换为L ...

  3. Idea必学基础使用--项目创建、显示设置及常用操作--超详细教学

    一.创建项目 (1)打开Idea 如果第一次打开,会出现一个界面,因为我不是第一次打开,就没有截图资源了.在这里说一下各行的含义: <1> Create New Project 创建新项目 ...

  4. SpringBoot整合MongoDB完成CRUD操作(超详细)

    官方文档:https://www.mongodb.com/docs/manual/reference/connection-string/ 01.导入依赖 <dependency>< ...

  5. OpenCV之imgproc 模块. 图像处理(1)图像平滑处理 腐蚀与膨胀(Eroding and Dilating) 更多形态学变换 图像金字塔 基本的阈值操作

    图像平滑处理 目标 本教程教您怎样使用各种线性滤波器对图像进行平滑处理,相关OpenCV函数如下: blur GaussianBlur medianBlur bilateralFilter 原理 No ...

  6. VS+OpenCV+VC超详细的配置教程

    写在前面的话 版权声明:转载请注明出处! 博主是一个小菜鸟,并且非常玻璃心!如果文中有什么问题,请友好地指出来,博主查证后会进行更正. 每篇文章都是博主现阶段的理解,如果理解的更深入的话,博主会不定时 ...

  7. OpenCV 【十九】图像金字塔/基本的阈值操作/实现自己的线性滤波器

    目录 1.part one 图像金字塔 1.1原理 1.1.1图像金字塔 1.1.2高斯金字塔 1.2代码 1.3运行结果 2.part two 基本的阈值操作¶ 2.1原理 2.1.1阈值化的类型: ...

  8. OpenCV基本的阈值操作

    目的: 使用OpenCV 中的函数cv::threshold实现阈值操作 理论: 阈值? 1) 最简单的分割方法 2) 应用实例:从图像中分割出我们要分析的对象区域.这种分离基于对象的像素和背景像素之 ...

  9. OpenCV中阈值操作

    阈值分割,顾名思义,就是对图像的像素点和选中的阈值进行比对的图像分割方法,在OpenCV 2.X中,Threshold()函数(基本阈值操作)和adaptiveThreshold()函数(自适应阈值操 ...

  10. arcgis 地图_ArcGIS超详细入门操作:ArcGIS矢量化地图详细步骤

    今天给大家带来的干货是[ArcGIS超详细入门操作:ArcGIS矢量化地图详细步骤],欢迎大家收藏查阅! 在桌面上新建一个文件夹,打开ArcCatalog, "文件"--" ...

最新文章

  1. 软件包管理(rpmyum)
  2. dnslog在mysql在linux_DNSlog实现Mysql注入
  3. apache camel 相关配置_小白在 linux 系统部署apache、mysql、Laravel 环境学习笔记!
  4. 机器学习模型可解释性的6种Python工具包,总有一款适合你!
  5. Boltzmann Machine 入门(2)
  6. 遍历输出所有子视图(View)
  7. I NEED A OFFER!(HDU-1203)
  8. linux 远程链接数据库报错host *** is not allowed to connect to this mysql server
  9. 企业应用中的作业调度
  10. 为什么这个SQL Server DBA学习PowerShell--SMO任务及杂项
  11. Linux查看域名对应的ip地址
  12. C语言位运算的取反(~)真实原理解析
  13. 【Pandas】北理工嵩天老师Python数据分析与展示之Pandas
  14. php root进程保存文件夹,thinkphp5日志文件夹及文件权限问题的解决
  15. 如何下载海淀区卫星地图高清版大图
  16. win10的计算机策略组,Win10家庭版如何添加组策略功能?
  17. 苹果x和xsmax有什么区别_苹果12和12pro有什么区别?参数对比拍照续航,哪个值得买?...
  18. 商城系统选择技巧归纳
  19. 对本课程的期望以及教学建议
  20. [SPRD]展锐Android R关机充电动画修改

热门文章

  1. 全国青少年电子信息智能创新大赛(复赛)python·模拟一卷
  2. 【MFC】EnableWindow:启用/禁用控件或窗口
  3. 腾讯云搭建WordPress个人博客
  4. 少儿学习编程有什么好处
  5. PostgreSQL-模糊查询
  6. 2021年中国人民币结算业务发生额增长,创历史新高,其中:跨境贸易人民币结算业务近8万亿[图]
  7. OpenJudge 1.6.3
  8. [数值计算-10]:一元非线性函数求最小值 - 导数与梯度下降法Python法代码示例
  9. html量子效果,HTML5/Canvas量子隐形传输动画
  10. 喝什么茶保肝又护肾?