阈值的作用是根据设定的值处理图像的灰度值,比如灰度大于某个数值像素点保留。通过阈值以及有关算法可以实现从图像中抓取特定的图形,比如去除背景等。
cv2中的阈值相关函数有:

  1. 普通阈值函数threshold
  2. 自适应阈值函数adaptivthreshold

首先介绍简单阈值函数:cv2.threshold(src, thresh, maxval, type[, dst]),返回值为retval, dst
其中:
src是灰度图像
thresh是起始阈值
maxval是最大值
type是定义如何处理数据与阈值的关系。有以下几种:

选项 像素值>thresh 其他情况
cv2.THRESH_BINARY maxval 0
cv2.THRESH_BINARY_INV 0 maxval
cv2.THRESH_TRUNC thresh 当前灰度值
cv2.THRESH_TOZERO 当前灰度值 0
cv2.THRESH_TOZERO_INV 0 当前灰度值

另外的取值为:

  • cv2.THRESH_OTSU
  • cv2.THRESH_TRIANGLE
  • cv2.THRESH_MASK

cv2.THRESH_OTSU使用最小二乘法处理像素点,而cv2.THRESH_TRIANGLE使用三角算法处理像素点。一般情况下,cv2.THRESH_OTSU适合双峰图。cv2.THRESH_TRIANGLE适合单峰图。单峰图或者双峰图指的是灰度直方图。
比如下面的图片的灰度直方图是:

cv2.THRESH_OTSU、cv2.THRESH_TRIANGLE是标志位,他们可以和其他参数,比如cv2.THRESH_BINARY一起使用。
当使用cv2.THRESH_OTSU或cv2.THRESH_TRIANGLE时,阈值是动态的,会根据计算结果返回相应的数值。
以下是固定阈值、使用了OTSU、使用了TRIANGLE的结果:

import cv2
import matplotlib.pyplot as pltimg = cv2.imread('d:\\xk.png')
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
min_value=127
#固定阈值
ret,thresh1 = cv2.threshold(gray,min_value,255,cv2.THRESH_BINARY)
ret,thresh2 = cv2.threshold(gray,min_value,255,cv2.THRESH_BINARY_INV)
ret,thresh3 = cv2.threshold(gray,min_value,255,cv2.THRESH_TRUNC)
ret,thresh4 = cv2.threshold(gray,min_value,255,cv2.THRESH_TOZERO)
ret,thresh5 = cv2.threshold(gray,min_value,255,cv2.THRESH_TOZERO_INV)
print("固定阈值:", ret)
#使用了OTSU
ret,thresh11 = cv2.threshold(gray,min_value,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)
ret,thresh12 = cv2.threshold(gray,min_value,255,cv2.THRESH_BINARY_INV+cv2.THRESH_OTSU)
ret,thresh13 = cv2.threshold(gray,min_value,255,cv2.THRESH_TRUNC+cv2.THRESH_OTSU)
ret,thresh14 = cv2.threshold(gray,min_value,255,cv2.THRESH_TOZERO+cv2.THRESH_OTSU)
ret,thresh15 = cv2.threshold(gray,min_value,255,cv2.THRESH_TOZERO_INV+cv2.THRESH_OTSU)
print("OTSU:", ret)
#使用了TRIANGLE
ret, thresh21 = cv2.threshold(gray, min_value, 255, cv2.THRESH_BINARY + cv2.THRESH_TRIANGLE)
ret, thresh22 = cv2.threshold(gray, min_value, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_TRIANGLE)
ret, thresh23 = cv2.threshold(gray, min_value, 255, cv2.THRESH_TRUNC + cv2.THRESH_TRIANGLE)
ret, thresh24 = cv2.threshold(gray, min_value, 255, cv2.THRESH_TOZERO + cv2.THRESH_TRIANGLE)
ret, thresh25 = cv2.threshold(gray, min_value, 255, cv2.THRESH_TOZERO_INV + cv2.THRESH_TRIANGLE)
print("TRIANGLE:", ret)
titles = ['BINARY','BINARY_INV','TRUNC','TOZERO','TOZERO_INV','BINARY+OTSU','BINARY_INV+OTSU','TRUNC+OTSU','TOZERO+OTSU','TOZERO_INV+OTSU','BINARY+TRI','BINARY_INV+TRI','TRUNC+TRI','TOZERO+TRI','TOZERO_INV+TRI']
images = [thresh1,thresh2,thresh3,thresh4,thresh5,thresh11,thresh12,thresh13,thresh14,thresh15,thresh21,thresh22,thresh23,thresh24,thresh25]
for i in range(15):plt.subplot(3,5,i+1),plt.imshow(images[i],'gray')plt.title(titles[i])plt.xticks([]),plt.yticks([])
plt.show()


在没使用任何算法的情况下,使用阈值=127会过滤掉绿色的圆。另外,可以发现返回的阈值也是不同的:

固定阈值: 127.0
OTSU: 123.0
TRIANGLE: 93.0

原始的图片和直方图如下:

实际的图片处理要比这个复杂。后面会介绍更多的图像处理使用方法。

CV2简单阈值函数:cv2.threshold()相关推荐

  1. OpenCV-Python学习笔记(八):图像阈值:简单阈值、自适应阈值、 Otsu's阈值

    目标 • 本节你将学到简单阈值,自适应阈值, Otsu's 二值化等 • 将要学习的函数有 cv2.threshold, cv2.adaptiveThreshold 等. 1.简单阈值 与名字一样,这 ...

  2. OpenCV第六篇:阈值函数

    阈值的作用是根据设定的值处理图像的灰度值,比如灰度大于某个数值像素点保留.通过阈值以及有关算法可以实现从图像中抓取特定的图形,比如去除背景等.实例图片:  1.普通阈值函数:threshold(像素矩 ...

  3. 图像阈值处理cv2.threshold()函数(python)

    内容 cv2.threshold()函数:在opencv中比较常用,但一开始不是很理解是什么意思. 下面是官方文档中给的解释 Python: cv2.threshold(src, thresh, ma ...

  4. 【笔记】opencv阈值处理 threshold函数 cv2.THRESH_BINARY ,cv2.THRESH_TRUNC) cv2.adaptiveThreshold()

    像素是在模拟图像数字化时对连续空间进行离散化得到的.每个像素具有整数行(高)和列(宽)位置坐标,同时每个像素都具有整数灰度值或颜色值. threshold函数 返回的第一个参数为阈值,第二个为结果图像 ...

  5. OpenCV:二值化函数cv2.threshold

    目录 功能作用: (一)简单阈值 (二)自适应阈值: (三)Otsu's二值化 功能作用: 二值化函数作用:图像的二值化就是将图像上的像素点的灰度值设置为0或255,这样将使整个图像呈现出明显的黑白效 ...

  6. cv2.threshholding()简单阈值、自适应阈值,Octus阈值

    @[TOC](cv2.threshholding()简单阈值.自适应阈值,Octus阈值 这篇博客将延续上一篇简单阈值处理,继续介绍自适应阈值及Octus阈值: 简单阈值详情见: https://bl ...

  7. 计算机视觉开源库OpenCV之查找轮廓函数cv2.findContours()介绍

    计算机视觉开源库OpenCV之查找轮廓函数cv2.findContours说明如下: 示例代码: #!/usr/bin/env python3import cv2image = cv2.imread( ...

  8. 计算机视觉开源库OpenCV之绘制轮廓函数cv2.drawContours()介绍

    计算机视觉开源库OpenCV之绘制轮廓函数cv2.drawContours(),用于轮廓的绘制或填充. cv2.drawContours(image, contours, contourIdx, co ...

  9. 【opencv-python】视频处理(5) cv2.VideoCapture.grab()函数、cv2.VideoCapture.retrieve()函数

    [opencv-python]视频处理(5) 一.cv2.VideoCapture.grab()函数 二.cv2.VideoCapture.retrieve()函数 三.与cv2.VideoCaptu ...

最新文章

  1. 【Docker】容器与系统时间同步
  2. 2020年11月DB-Engines排行:Oracle归零年内涨幅 PostgreSQL增长第一独秀
  3. jQuery对象与DOM对象之间的转换方法
  4. mysql数据库事件不执行_【数据库】mysql查看事件是否执行
  5. 公众号的Markdown排版利器:Md2All
  6. 计算机的显卡控制面板在哪里,nvidia控制面板在哪里打开
  7. C++线程安全单例类最全总结
  8. 远程控制工具ToDesk测评
  9. 【转载】DEDE与DISCUZ整合积分同步[会员表,积分表
  10. 转:Windows 7 SP1 RC 开始推送 ┆ 特殊补丁KB976932 ┆ 下载
  11. 代理服务器搭建socks5环境的方法
  12. 【实用技巧】知网文献不限量免费下载方法,亲测可用
  13. mac 网络共享 wifi共享
  14. SpringBoot整合Elasticsearch,应届毕业生java面试准备材料
  15. 微信小程序注册/登陆,若依后台获取token
  16. Wordpress网页直接插入bilibili视频方法
  17. 转:Chrome浏览器查看网站登录 Cookie 信息的方法
  18. Mybatis分页实现
  19. eclipse Jad class文件反编译插件安装及net.sf.jadclipse_3.3.0.jar和jad.exe下载地址
  20. TCP-UDP网络编程调试助手下载

热门文章

  1. php codeIgniter 框架引入第三方类库文件
  2. CXF客户端报Cannot create a secure XMLInputFactory问题
  3. 机器翻译系统中的泰文分词
  4. Qt实现tcp发送和接收文件
  5. 有什么是适合情侣间做的事情?
  6. 阿里云视频点播-记录
  7. Nginx配置同时支持http和https两种方式访问
  8. ue4材质节点怎么用_ue4材质常用节点
  9. 【JavaScript—数组】详解js数组一篇文章吃透js-数组
  10. Nextcloud 无法在ipad登录,已解决