Opencv笔记(九)——图像阈值
学习目标:
- 学习简单阈值,自适应阈值,Otsu’s 二值化等
- 学习函数cv2.threshold,cv2.adaptiveThreshold 等。
一、简单阈值
与名字一样,这种方法非常简单。但像素值高于阈值时,我们给这个像素赋予一个新值(可能是白色),否则我们给它赋予另外一种颜色(也许是黑色)。我们要用到的函数就是cv2.threshold,下面介绍他的参数。
- cv2.threshold()函数中四个参数分别是原图像、阈值、最大值、阈值类型。这个函数有两个返回值,第一个为 retVal,即阈值,第二个就是阈值化之后的结果图像了。原图像应该是灰度图,阈值类型一般分为五种,如下所示:
cv2.THRESH_BINARY——大于阈值的部分像素值变为最大值,其他变为0
cv2.THRESH_BINARY_INV——大于阈值的部分变为0,其他部分变为最大值
cv2.THRESH_TRUNC——大于阈值的部分变为阈值,其余部分不变
cv2.THRESH_TOZERO——大于阈值的部分不变,其余部分变为0
cv2.THRESH_TOZERO_INV——大于阈值的部分变为0,其余部分不变
import cv2img = cv2.imread('/home/wl/le.jpeg',0)ret,thresh = cv2.threshold(img,175,255,cv2.THRESH_BINARY)while(1):cv2.imshow('opencv',thresh)k = cv2.waitKey(1)& 0XFFif k == ord('q'):break
cv2.imwrite('/home/wl/1.jpg',thresh)
cv2.destroyAllWindows()
原图:
效果图:
二、自适应阈值
在前面的部分我们使用是全局阈值,整幅图像采用同一个数作为阈值。当时这种方法并不适应与所有情况,尤其是当同一幅图像上的不同部分的具有不同亮度时。这种情况下我们需要采用自适应阈值。此时的阈值是根据图像上的每一个小区域计算与其对应的阈值。因此在同一幅图像上的不同区域采用的是不同的阈值,从而使我们能在亮度不同的情况下得到更好的结果。要用到的函数是cv2.adaptiveThreshold(),下面介绍其参数。
- cv2.adaptiveThreshold()共有六个参数,返回值只有一个,即阈值化之后的结果图像。
- 第一个参数是原图,应该为灰度图;
- 第二个参数是最大值;
- 第三个参数是计算阈值的方法,有两种方法:cv2.ADPTIVE_THRESH_MEAN_C:阈值取自相邻区域的平
均值、cv2.ADPTIVE_THRESH_GAUSSIAN_C:阈值取值相邻区域的加权和,权重为一个高斯窗口。 - 第四个参数是取阈值类型,必须是下者之一, cv2.THRESH_BINARY或 cv2.THRESH_BINARY_INV。
- 第五个参数是block_size,指用来计算阈值的象素邻域大小: 3, 5, 7, ..
- 第六个参数是是一个常数,阈值就等于的平均值或者加权平均值减去这个常数。
import cv2img = cv2.imread('/home/wl/le.jpeg',0)thresh = cv2.adaptiveThreshold(img,255,cv2.ADAPTIVE_THRESH_MEAN_C,cv2.THRESH_BINARY,3,5)while(1):cv2.imshow('opencv',thresh)k = cv2.waitKey(1)& 0XFFif k == ord('q'):break
cv2.imwrite('/home/wl/1.jpeg',thresh)
cv2.destroyAllWindows()
三、Otsu’s 二值化
在使用全局阈值时,我们就是随便给了一个数来做阈值,那我们怎么知道我们选取的这个数的好坏呢?答案就是不停的尝试。如果是一副双峰图像(简单来说双峰图像是指图像直方图中存在两个峰)呢?我们岂不是应该在两个峰之间的峰谷选一个值作为阈值?这就是 Otsu 二值化要做的。简单来说就是对一副双峰图像自动根据其直方图计算出一个阈值。(对于非双峰图像,这种方法得到的结果可能会不理想)。这里用到到的函数还是 cv2.threshold(),但是需要多传入一个参数(flag):cv2.THRESH_OTSU。这时要把阈值设为 0。然后算法会找到最优阈值,这个最值就是返回值 retVal。如果不使用 Otsu 二值化,返回的retVal 值与设定的阈值相等。
import cv2
img = cv2.imread('/home/wl/le.jpeg',0)
ret,thresh = cv2.threshold(img,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)
while(1):cv2.imshow('opencv',thresh)k = cv2.waitKey(1)& 0XFFif k == ord('q'):break
cv2.imwrite('/home/wl/1.jpg',thresh)
cv2.destroyAllWindows()
转载于:https://www.cnblogs.com/longwhite/p/10397774.html
Opencv笔记(九)——图像阈值相关推荐
- OpenCV学习笔记(九)——图像轮廓(下)
<OpenCV轻松入门:面向Python>学习笔记(九) 1-3 查找并绘制轮廓.矩特性及Hu矩 4-5 轮廓拟合及凸包 6. 利用形状场景算法比较轮廓 6.1 计算形状场景距离 6.2 ...
- OpenCV中的图像阈值处理算法
简 介: 本文讨论了如何通过图像阈值算法来对图像中特点对接进行隔离. 演示了几种不同的阈值分割(全局阈值分割)算法的结果.对于最简单的阈值算法,通过改变其中的阈值可以获得不同的分割效果. 关键词: 阈 ...
- 【千律】OpenCV基础:图像阈值分割 -- 自适应阈值分割 -- 代码实现
环境:Python3.8 和 OpenCV 内容:自适应阈值分割代码实现 import cv2 as cv import numpy as np import matplotlib.pyplot as ...
- 二维otsu算法python_【OpenCV+Python】图像阈值与OTSU算法
图像阈值 自本教程开始,我们已经进入了图像处理的一些基本操作的学习,所谓的图像阈值,就是图像二值化.什么是二值化?就是只有0和1,没有其他的.在OpenCV的图像里面,二值化表示图像的像素为0和255 ...
- OpenCV系列之图像阈值 | 十五
目标 在本教程中,您将学习简单阈值,自适应阈值和Otsu阈值. 你将学习函数cv.threshold和cv.adaptiveThreshold. 简单阈值 在这里,问题直截了当.对于每个像素,应用相同 ...
- OpenCV笔记之 图像有效区域复制 image.copyTo()
**openCV image.copyTo()** 1,实现目的 为了实现图像进行等比例的扩张,其中牵涉到一些前提环节.一下对牵涉到的几个关键点一一进行记录. 1,OpenCV中Mat类的图像如何设置 ...
- 【OpenCV笔记】图像预处理
2019独角兽企业重金招聘Python工程师标准>>> http://m.blog.csdn.net/article/details?id=38061171 转载于:https:// ...
- ❤️大家中秋节快乐❤️接下来请欣赏Python Opencv实战之图像阈值和模糊处理,万字实战,收藏起来吧~
- OpenCV笔记-图像预处理1
OpenCV笔记 一. 图像预处理 1. 图像显示与存储 1.1 颜色空间 颜色空间(RGB) 加法混色 三通道:RGB 一个像素的颜色值:(b,g,r) 取值范围:[0,255] or [0.0,1 ...
- OpenCV图像处理(十二)---图像阈值化
如果两个热力学系统中的每一个都与第三个热力学系统处于热平衡(温度相同),则它们彼此也必定处于热平衡.这一结论称做"热力学第零定律".又称热平衡定律,是热力学的四条基本定律之一,是一 ...
最新文章
- 计算机的参数配置选项在哪,教你电脑win7如何进去bios设置相关参数
- 微信小程序首页index.js获取不到app.js中动态设置的globalData的原因以及解决方法
- matlab 暂停命令(pause和input)
- springboot 单例_如何实现一个单例及优化
- android重新编译res,使用 gradle 在编译时动态设置 Android resValue / BuildConfig / Manifes中lt;meta-datagt;变量的值...
- jQuery 遍历:思路总结,项目场景中如何处理/控制获取的 each 遍历次数?
- mybatis plus 导出sql_软件更新丨mybatis-plus 3.0.7 发布,辞旧迎新
- 双12压测引出的线上Full GC排查
- 动态照片制作html模板
- python实现简单爬虫百度首页_python实现简单爬虫功能的示例
- 10115 - Automatic Editing
- explorer.exe应用程序错误,该内存不能为READ
- 智能机器人及其应用ppt课件_3D机器视觉在智能机器人拆垛中的应用
- 基于JSP网上购书系统
- 数学分析教程(科大)——1.12笔记+习题
- 光纤通道网络FC vs 以太网光纤通道FCoE
- Android解析XML文件(assets目录)
- Linux系统启动过程及其修复过程简析(CentOS5、6)
- 集万千优点于一身的Haproxy集群,你还不了解?
- Unite 2018展区全曝光,Made with Unity精彩游戏等你来体验
热门文章
- tableView相关
- apache修改最大连接并用ab网站压力测试
- 利用rank() 和 dense_rank() 来实现分类排名
- Robots.txt和Robots META
- python读取文件特定内容_python读取指定内存的内容
- 基础认证伪造工具phishery
- mysql 10 进制 转36_mysql 10进制与35进制之间的转换 注意Power处理bigint的问题
- 怎么配置mysql的ip_设置MYSQL允许用IP访问
- mvvm模式和mvc的区别_mvvm 和 mvc 区别?
- python生成器使用场景桌面_Python – 如何更简洁地使用生成器?