图像阈值(threshold)

  • 简单点说是把图像分割的标尺,这个标尺是根据什么产生的,阈值产生算法?阈值类型。(Binary segmentation)二进制分割
  • OpenCV提供函数 cv :: threshold 来执行阈值操作。

    1. src_gray:我们的输入图片
    2. dst:目标(输出)图像
    3. threshold_value:进行阈值操作的阈值
    4. max_BINARY_value:二进制阈值操作使用的值(设置所选像素)
    5. threshold_type:5个阈值操作之一。
  • 在阈值类型前,怎么寻找阈值? 除了主动输入,还可以用 THRESH_OTSU 、 THRESH_TRIANGLE 两种opencv提供的算法产生阈值(只适用于颜色数据是8位的图像,否则报错)

1. 阈值类型一阈值二值化(threshold binary)

  • 左下方的图表示图像像素点Src(x,y)值分布情况,蓝色水平线表示阈值

2. 阈值类型一阈值反二值化(threshold binary Inverted)

  • 左下方的图表示图像像素点Src(x,y)值分布情况,蓝色水平线表示阈值

3. 阈值类型一截断 (truncate)

  • 左下方的图表示图像像素点Src(x,y)值分布情况,蓝色水平线表示阈值

4. 阈值类型一阈值取零 (threshold to zero)

  • 左下方的图表示图像像素点Src(x,y)值分布情况,蓝色水平线表示阈值

5. 阈值类型一阈值反取零 (threshold to zero inverted)

  • 左下方的图表示图像像素点Src(x,y)值分布情况,蓝色水平线表示阈值

总结

代码示例

#include<opencv2/opencv.hpp>
#include<iostream>
using namespace cv;Mat src,gray_src,dst;
char input_win[]="Input Windows",output_win[]="Output Windows";
int threshold_type=3,threshold_value=0;
int const max_value=255,max_type=4;
void Threshold_Demo(int, void* );int main(){//1. 加载图像和显示原图src=imread("E:/Experiment/OpenCV/Pictures/dog2.jpg");if(src.empty()){printf("could not load image...");return -1;}namedWindow(input_win,CV_WINDOW_AUTOSIZE);namedWindow(output_win,CV_WINDOW_AUTOSIZE);imshow(input_win,src);//显示图片//2、如果是BGR,我们将其转换为灰度。可以使用函数cv :: cvtColor:cvtColor(src,gray_src,CV_BGR2GRAY);//3、为用户创建2个轨道栏以输入用户输入:createTrackbar("阈值类型:",output_win, &threshold_type, max_type, Threshold_Demo);createTrackbar("阈值大小:",output_win, &threshold_value, max_value, Threshold_Demo);Threshold_Demo(0,0);//不主动设置阈值,通过 THRESH_OTSU 或 THRESH_TRIANGLE 产生阈值,这个时候 threshold_value 参数不会起作用Mat dst1,dst2;int threshold_max=255;//THRESH_OTSU 是迭代找到颜色数据最大最小值,然后找出一个阈值//THRESH_TRIANGLE 如果图像中的对象是一样的(颜色都是一个色调),用这个寻找阈值更好threshold(gray_src, dst1, threshold_value, threshold_max, THRESH_OTSU | threshold_type);//传参设置阈值类型imshow("THRESH_OTSU", dst1);threshold(gray_src, dst2, threshold_value, threshold_max, THRESH_TRIANGLE| threshold_type);//THRESH_TRIANGLEimshow("THRESH_TRIANGLE", dst2);waitKey(0);return 0;
}void Threshold_Demo(int, void*){//1. src_gray:我们的输入图片//2. dst:目标(输出)图像//3. threshold_value:进行阈值操作的阈值//4. max_BINARY_value:二进制阈值操作使用的值(设置所选像素)//5. threshold_type:5个阈值操作之一。//参数:输入,输出,设置的阈值,maxVal,阈值类型threshold(gray_src, dst, threshold_value, 255, threshold_type);imshow(output_win, dst);
}

运行截图

参考博客

  1. https://blog.csdn.net/huanghuangjin/article/details/80962043
  2. https://blog.csdn.net/LYKymy/article/details/83154291

OpenCV-图像处理(14、基本阈值操作)相关推荐

  1. OpenCV使用inRange的阈值操作Thresholding Operations

    OpenCV使用inRange的阈值操作Thresholding Operations 使用inRange的阈值操作 目标 理论 HSV色彩空间 代码 解释 结果 使用inRange的阈值操作 目标 ...

  2. pythonopencv图像形态_Python+OpenCV图像处理之其他形态学操作

    顶帽(Top Hat): 原图像与开操作之间的差值图像,突出原图像中比周围亮的区域 黑帽(Black Hat): 闭操作图像与原图像的差值图像, 突出原图像中比周围暗的区域 形态学梯度(Gradien ...

  3. [转载] python+opencv图像处理:numpy数组操作

    参考链接: Python中的numpy.pv 图片以矩阵的形式存在电脑里,需要用到数组操作来完成对图像的处理 常用的有两个API: zeros和ones 1 np.ones(size) 可以创建任意维 ...

  4. 二值图像分析:OpenCV中的二值化阈值操作

    二值图像分析:OpenCV中的二值化阈值操作 1.二值图像的定义 2.OpenCV中的基本阈值操作 3.OTSU二值寻找算法 3.1 OTSU二值寻找算法介绍 3.2 OTSU二值寻找算法分析 3.2 ...

  5. OpenCV图像处理视频教程——入门篇(二)

    文章目录 10 膨胀与腐蚀 (1)形态学操作(morphology operators)--膨胀.腐蚀 (2)相关API (3)动态调整结构元素大小TrackBar 11 形态学操作 (1)开操作- ...

  6. 《OpenCv视觉之眼》Python图像处理十六:Opencv图像处理实战一之图像中的硬币检测

    本专栏主要介绍如果通过OpenCv-Python进行图像处理,通过原理理解OpenCv-Python的函数处理原型,在具体情况中,针对不同的图像进行不同等级的.不同方法的处理,以达到对图像进行去噪.锐 ...

  7. 《OpenCv视觉之眼》Python图像处理十九:Opencv图像处理实战四之通过OpenCV进行人脸口罩模型训练并进行口罩检测

    本专栏主要介绍如果通过OpenCv-Python进行图像处理,通过原理理解OpenCv-Python的函数处理原型,在具体情况中,针对不同的图像进行不同等级的.不同方法的处理,以达到对图像进行去噪.锐 ...

  8. 《OpenCv视觉之眼》Python图像处理二十三:OpenCV图像处理最终章之基于PyQt5的图像处理界面设计及功能实现

    本专栏主要介绍如果通过OpenCv-Python进行图像处理,通过原理理解OpenCv-Python的函数处理原型,在具体情况中,针对不同的图像进行不同等级的.不同方法的处理,以达到对图像进行去噪.锐 ...

  9. 《OpenCv视觉之眼》Python图像处理二十一:Opencv图像处理之图像线性变换和非线性变换的方法及原理

    本专栏主要介绍如果通过OpenCv-Python进行图像处理,通过原理理解OpenCv-Python的函数处理原型,在具体情况中,针对不同的图像进行不同等级的.不同方法的处理,以达到对图像进行去噪.锐 ...

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

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

最新文章

  1. 全球AI初创公司去年融资创新纪录:总额逾266亿美元超2200笔交易
  2. sql 发送邮件网络附件_利用VBA发送附件电子邮件
  3. 【Tiny4412】 Android系统的烧写
  4. php怎么实现商品评论功能,php购物车功能如何实现
  5. Spring Data Solr教程:Solr简介
  6. U811.1接口EAI系列之二-BOM构成-委外BOM构成--VB语言
  7. 阿里云 linux 挂载数据盘
  8. C# 使用SFTP的上传下载文件时如何使用代理
  9. 工程师原创:人人都看得懂的电磁场理论
  10. 利用FILTER特性优化SQL
  11. 第一个Andriod应用
  12. 2019 年第 34 周 DApp 影响力排行榜 | TokenInsight
  13. 求生之路服务器列表只显示ip,L4DL4D2 玩家进入退出+玩家转队伍SteamIdIP+国家+城市显示SQL版本 SP源码 2.4(2013-10-15更新)...
  14. linux 关闭系统中多余的服务
  15. 10分钟教你用python打造贪吃蛇超详细教程
  16. Lenovo E570 Windows 10 换Windows7
  17. eclipse中import existing projects into workspace和open projects from file systems分别有什么用?
  18. 「应用笔记」激光二维码导航混合制图
  19. Mysql Json格式
  20. ATI显卡配置aticonfig和amdcccle全解

热门文章

  1. getSupportFragmentManager要用在FragmentActivity及其子类中
  2. Gxemul 运行原理简述
  3. Unity移动端使用 Handheld.PlayFullScreenMovie播放视频参数
  4. curl basic 认证
  5. Git 切换远程仓库地址三种方法
  6. android studio react native 模拟器,Windows下搭建React Native环境与Android Studio集成
  7. python图形编程环境环境_Python开发环境Wing IDE matplotlib 2D绘图库代码调试技巧小结...
  8. linux操作系统基础教程第二版附录答案,Linux操作系统(第2版) 课后习题答案
  9. mysql从字段取出地名_mysql中从字段中URL提取域名信息
  10. python 解析模块脚本_Python HTMLParser模块解析html获取url实例