OpenCV-图像处理(14、基本阈值操作)
图像阈值(threshold)
- 简单点说是把图像分割的标尺,这个标尺是根据什么产生的,阈值产生算法?阈值类型。(Binary segmentation)二进制分割
- OpenCV提供函数
cv :: threshold
来执行阈值操作。
- src_gray:我们的输入图片
- dst:目标(输出)图像
- threshold_value:进行阈值操作的阈值
- max_BINARY_value:二进制阈值操作使用的值(设置所选像素)
- 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);
}
运行截图
参考博客
- https://blog.csdn.net/huanghuangjin/article/details/80962043
- https://blog.csdn.net/LYKymy/article/details/83154291
OpenCV-图像处理(14、基本阈值操作)相关推荐
- OpenCV使用inRange的阈值操作Thresholding Operations
OpenCV使用inRange的阈值操作Thresholding Operations 使用inRange的阈值操作 目标 理论 HSV色彩空间 代码 解释 结果 使用inRange的阈值操作 目标 ...
- pythonopencv图像形态_Python+OpenCV图像处理之其他形态学操作
顶帽(Top Hat): 原图像与开操作之间的差值图像,突出原图像中比周围亮的区域 黑帽(Black Hat): 闭操作图像与原图像的差值图像, 突出原图像中比周围暗的区域 形态学梯度(Gradien ...
- [转载] python+opencv图像处理:numpy数组操作
参考链接: Python中的numpy.pv 图片以矩阵的形式存在电脑里,需要用到数组操作来完成对图像的处理 常用的有两个API: zeros和ones 1 np.ones(size) 可以创建任意维 ...
- 二值图像分析:OpenCV中的二值化阈值操作
二值图像分析:OpenCV中的二值化阈值操作 1.二值图像的定义 2.OpenCV中的基本阈值操作 3.OTSU二值寻找算法 3.1 OTSU二值寻找算法介绍 3.2 OTSU二值寻找算法分析 3.2 ...
- OpenCV图像处理视频教程——入门篇(二)
文章目录 10 膨胀与腐蚀 (1)形态学操作(morphology operators)--膨胀.腐蚀 (2)相关API (3)动态调整结构元素大小TrackBar 11 形态学操作 (1)开操作- ...
- 《OpenCv视觉之眼》Python图像处理十六:Opencv图像处理实战一之图像中的硬币检测
本专栏主要介绍如果通过OpenCv-Python进行图像处理,通过原理理解OpenCv-Python的函数处理原型,在具体情况中,针对不同的图像进行不同等级的.不同方法的处理,以达到对图像进行去噪.锐 ...
- 《OpenCv视觉之眼》Python图像处理十九:Opencv图像处理实战四之通过OpenCV进行人脸口罩模型训练并进行口罩检测
本专栏主要介绍如果通过OpenCv-Python进行图像处理,通过原理理解OpenCv-Python的函数处理原型,在具体情况中,针对不同的图像进行不同等级的.不同方法的处理,以达到对图像进行去噪.锐 ...
- 《OpenCv视觉之眼》Python图像处理二十三:OpenCV图像处理最终章之基于PyQt5的图像处理界面设计及功能实现
本专栏主要介绍如果通过OpenCv-Python进行图像处理,通过原理理解OpenCv-Python的函数处理原型,在具体情况中,针对不同的图像进行不同等级的.不同方法的处理,以达到对图像进行去噪.锐 ...
- 《OpenCv视觉之眼》Python图像处理二十一:Opencv图像处理之图像线性变换和非线性变换的方法及原理
本专栏主要介绍如果通过OpenCv-Python进行图像处理,通过原理理解OpenCv-Python的函数处理原型,在具体情况中,针对不同的图像进行不同等级的.不同方法的处理,以达到对图像进行去噪.锐 ...
- OpenCV之imgproc 模块. 图像处理(1)图像平滑处理 腐蚀与膨胀(Eroding and Dilating) 更多形态学变换 图像金字塔 基本的阈值操作
图像平滑处理 目标 本教程教您怎样使用各种线性滤波器对图像进行平滑处理,相关OpenCV函数如下: blur GaussianBlur medianBlur bilateralFilter 原理 No ...
最新文章
- 全球AI初创公司去年融资创新纪录:总额逾266亿美元超2200笔交易
- sql 发送邮件网络附件_利用VBA发送附件电子邮件
- 【Tiny4412】 Android系统的烧写
- php怎么实现商品评论功能,php购物车功能如何实现
- Spring Data Solr教程:Solr简介
- U811.1接口EAI系列之二-BOM构成-委外BOM构成--VB语言
- 阿里云 linux 挂载数据盘
- C# 使用SFTP的上传下载文件时如何使用代理
- 工程师原创:人人都看得懂的电磁场理论
- 利用FILTER特性优化SQL
- 第一个Andriod应用
- 2019 年第 34 周 DApp 影响力排行榜 | TokenInsight
- 求生之路服务器列表只显示ip,L4DL4D2 玩家进入退出+玩家转队伍SteamIdIP+国家+城市显示SQL版本 SP源码 2.4(2013-10-15更新)...
- linux 关闭系统中多余的服务
- 10分钟教你用python打造贪吃蛇超详细教程
- Lenovo E570 Windows 10 换Windows7
- eclipse中import existing projects into workspace和open projects from file systems分别有什么用?
- 「应用笔记」激光二维码导航混合制图
- Mysql Json格式
- ATI显卡配置aticonfig和amdcccle全解
热门文章
- getSupportFragmentManager要用在FragmentActivity及其子类中
- Gxemul 运行原理简述
- Unity移动端使用 Handheld.PlayFullScreenMovie播放视频参数
- curl basic 认证
- Git 切换远程仓库地址三种方法
- android studio react native 模拟器,Windows下搭建React Native环境与Android Studio集成
- python图形编程环境环境_Python开发环境Wing IDE matplotlib 2D绘图库代码调试技巧小结...
- linux操作系统基础教程第二版附录答案,Linux操作系统(第2版) 课后习题答案
- mysql从字段取出地名_mysql中从字段中URL提取域名信息
- python 解析模块脚本_Python HTMLParser模块解析html获取url实例