学习目标:

  • 学习简单阈值,自适应阈值,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()共有六个参数,返回值只有一个,即阈值化之后的结果图像。
  1. 第一个参数是原图,应该为灰度图;
  2. 第二个参数是最大值;
  3. 第三个参数是计算阈值的方法,有两种方法:cv2.ADPTIVE_THRESH_MEAN_C:阈值取自相邻区域的平
    均值、cv2.ADPTIVE_THRESH_GAUSSIAN_C:阈值取值相邻区域的加权和,权重为一个高斯窗口。
  4. 第四个参数是取阈值类型,必须是下者之一, cv2.THRESH_BINARY或  cv2.THRESH_BINARY_INV。
  5. 第五个参数是block_size,指用来计算阈值的象素邻域大小: 3, 5, 7, ..
  6. 第六个参数是是一个常数,阈值就等于的平均值或者加权平均值减去这个常数。
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笔记(九)——图像阈值相关推荐

  1. OpenCV学习笔记(九)——图像轮廓(下)

    <OpenCV轻松入门:面向Python>学习笔记(九) 1-3 查找并绘制轮廓.矩特性及Hu矩 4-5 轮廓拟合及凸包 6. 利用形状场景算法比较轮廓 6.1 计算形状场景距离 6.2 ...

  2. OpenCV中的图像阈值处理算法

    简 介: 本文讨论了如何通过图像阈值算法来对图像中特点对接进行隔离. 演示了几种不同的阈值分割(全局阈值分割)算法的结果.对于最简单的阈值算法,通过改变其中的阈值可以获得不同的分割效果. 关键词: 阈 ...

  3. 【千律】OpenCV基础:图像阈值分割 -- 自适应阈值分割 -- 代码实现

    环境:Python3.8 和 OpenCV 内容:自适应阈值分割代码实现 import cv2 as cv import numpy as np import matplotlib.pyplot as ...

  4. 二维otsu算法python_【OpenCV+Python】图像阈值与OTSU算法

    图像阈值 自本教程开始,我们已经进入了图像处理的一些基本操作的学习,所谓的图像阈值,就是图像二值化.什么是二值化?就是只有0和1,没有其他的.在OpenCV的图像里面,二值化表示图像的像素为0和255 ...

  5. OpenCV系列之图像阈值 | 十五

    目标 在本教程中,您将学习简单阈值,自适应阈值和Otsu阈值. 你将学习函数cv.threshold和cv.adaptiveThreshold. 简单阈值 在这里,问题直截了当.对于每个像素,应用相同 ...

  6. OpenCV笔记之 图像有效区域复制 image.copyTo()

    **openCV image.copyTo()** 1,实现目的 为了实现图像进行等比例的扩张,其中牵涉到一些前提环节.一下对牵涉到的几个关键点一一进行记录. 1,OpenCV中Mat类的图像如何设置 ...

  7. 【OpenCV笔记】图像预处理

    2019独角兽企业重金招聘Python工程师标准>>> http://m.blog.csdn.net/article/details?id=38061171 转载于:https:// ...

  8. ❤️大家中秋节快乐❤️接下来请欣赏Python Opencv实战之图像阈值和模糊处理,万字实战,收藏起来吧~

  9. OpenCV笔记-图像预处理1

    OpenCV笔记 一. 图像预处理 1. 图像显示与存储 1.1 颜色空间 颜色空间(RGB) 加法混色 三通道:RGB 一个像素的颜色值:(b,g,r) 取值范围:[0,255] or [0.0,1 ...

  10. OpenCV图像处理(十二)---图像阈值化

    如果两个热力学系统中的每一个都与第三个热力学系统处于热平衡(温度相同),则它们彼此也必定处于热平衡.这一结论称做"热力学第零定律".又称热平衡定律,是热力学的四条基本定律之一,是一 ...

最新文章

  1. 计算机的参数配置选项在哪,教你电脑win7如何进去bios设置相关参数
  2. 微信小程序首页index.js获取不到app.js中动态设置的globalData的原因以及解决方法
  3. matlab 暂停命令(pause和input)
  4. springboot 单例_如何实现一个单例及优化
  5. android重新编译res,使用 gradle 在编译时动态设置 Android resValue / BuildConfig / Manifes中lt;meta-datagt;变量的值...
  6. jQuery 遍历:思路总结,项目场景中如何处理/控制获取的 each 遍历次数?
  7. mybatis plus 导出sql_软件更新丨mybatis-plus 3.0.7 发布,辞旧迎新
  8. 双12压测引出的线上Full GC排查
  9. 动态照片制作html模板
  10. python实现简单爬虫百度首页_python实现简单爬虫功能的示例
  11. 10115 - Automatic Editing
  12. explorer.exe应用程序错误,该内存不能为READ
  13. 智能机器人及其应用ppt课件_3D机器视觉在智能机器人拆垛中的应用
  14. 基于JSP网上购书系统
  15. 数学分析教程(科大)——1.12笔记+习题
  16. 光纤通道网络FC vs 以太网光纤通道FCoE
  17. Android解析XML文件(assets目录)
  18. Linux系统启动过程及其修复过程简析(CentOS5、6)
  19. 集万千优点于一身的Haproxy集群,你还不了解?
  20. Unite 2018展区全曝光,Made with Unity精彩游戏等你来体验

热门文章

  1. tableView相关
  2. apache修改最大连接并用ab网站压力测试
  3. 利用rank() 和 dense_rank() 来实现分类排名
  4. Robots.txt和Robots META
  5. python读取文件特定内容_python读取指定内存的内容
  6. 基础认证伪造工具phishery
  7. mysql 10 进制 转36_mysql 10进制与35进制之间的转换 注意Power处理bigint的问题
  8. 怎么配置mysql的ip_设置MYSQL允许用IP访问
  9. mvvm模式和mvc的区别_mvvm 和 mvc 区别?
  10. python生成器使用场景桌面_Python – 如何更简洁地使用生成器?