在第一部分中我们提到过 retVal,当我们使用 Otsu 二值化时会用到它。那么它到底是什么呢?
  在使用全局阈值时,我们就是随便给了一个数来做阈值,那我们怎么知道我们选取的这个数的好坏呢?答案就是不停的尝试。如果是一副双峰图像(简单来说双峰图像是指图像直方图中存在两个峰)呢?我们岂不是应该在两个峰之间的峰谷选一个值作为阈值?这就是 Otsu 二值化要做的。简单来说就是对一副双峰图像自动根据其直方图计算出一个阈值。(对于非双峰图像,这种方法得到的结果可能会不理想)。
这里用到到的函数还是 cv2.threshold(),但是需要多传入一个参数(flag):cv2.THRESH_OTSU。这时要把阈值设为 0。然后算法会找到最优阈值,这个最优阈值就是返回值 retVal。如果不使用 Otsu 二值化,返回的retVal 值与设定的阈值相等。
  下面的例子中,输入图像是一副带有噪声的图像。第一种方法,我们设127 为全局阈值。第二种方法,我们直接使用 Otsu 二值化。第三种方法,我们首先使用一个 5x5 的高斯核除去噪音,然后再使用 Otsu 二值化。看看噪音去除对结果的影响有多大吧。

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Mon Mar 25 11:42:56 2019@author: lg
"""import cv2
import numpy as np
from matplotlib import pyplot as pltimg = cv2.imread('cc.jpeg',0)# global thresholding
ret1,th1 = cv2.threshold(img,127,255,cv2.THRESH_BINARY)# Otsu's thresholding
ret2,th2 = cv2.threshold(img,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)# Otsu's thresholding after Gaussian filtering
blur = cv2.GaussianBlur(img,(5,5),0)
ret3,th3 = cv2.threshold(blur,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)# plot all the images and their histograms
images = [img, 0, th1,img, 0, th2,blur, 0, th3]
titles = ['Original Noisy Image','Histogram','Global Thresholding (v=127)','Original Noisy Image','Histogram',"Otsu's Thresholding",'Gaussian filtered Image','Histogram',"Otsu's Thresholding"]for i in range(3):plt.subplot(3,3,i*3+1),plt.imshow(images[i*3],'gray')plt.title(titles[i*3]), plt.xticks([]), plt.yticks([])plt.subplot(3,3,i*3+2),plt.hist(images[i*3].ravel(),256)plt.title(titles[i*3+1]), plt.xticks([]), plt.yticks([])plt.subplot(3,3,i*3+3),plt.imshow(images[i*3+2],'gray')plt.title(titles[i*3+2]), plt.xticks([]), plt.yticks([])
plt.show()import numpy as np
import cv2
from matplotlib import pyplot as plt#img = cv2.imread('messi5.jpg',0)
plt.imshow(images[2], cmap = 'gray', interpolation = 'bicubic')
plt.xticks([]), plt.yticks([])  # to hide tick values on X and Y axis
plt.show()


opencv otsu二值化相关推荐

  1. OTSU 二值化的实现

    #include <stdio.h> #include <string> #include "opencv2/highgui/highgui.hpp" #i ...

  2. OpenCV差分二值化的实时场景文本检测的实例(附完整代码)

    OpenCV差分二值化的实时场景文本检测的实例 OpenCV差分二值化的实时场景文本检测的实例 OpenCV差分二值化的实时场景文本检测的实例 OpenCV差分二值化的实时场景文本检测的实例(附完整代 ...

  3. OpenCV图像二值化,Python

    OpenCV图像二值化,Python 原图: 二值化处理(只有黑和白): import cv2if __name__=="__main__":image = cv2.imread( ...

  4. opencv自适应二值化原理

    opencv自适应二值化原理 先对图像做模糊处理(一般是均值或者高斯模糊).(这里可以加上自己的操作,做一些其他类型的模糊以及一些形态学的操作). 用原图与模糊处理之后的图像做差得到一幅图像. 判断图 ...

  5. opencv 二值化 python_Python OpenCV 图像二值化-阈值分割

    1.二值化处理 # 手动二值化处理 # 设置阈值大小 threshold thresh = 125 # 设置超过阈值像素值的最大值 maxval = 255 # THRESH_BINARY:超过阈值为 ...

  6. Opencv java 二值化函数threshold (10)

    函数理解 threshold 英语的意思是门槛,门槛的意思说要么在门槛外,要么在门槛内,并且门槛具有一定的条件要求 接下来我们看在opencv中如何使用该函数 Imgproc.threshold(sr ...

  7. [转载] python3 opencv 图像二值化笔记(cv2.adaptiveThreshold)

    参考链接: python opencv 基础6: cv2.threshold()二值图像 前一篇研究了opencv二值化方法threshold的使用,但是这个方法也存在一定的局限性,假如有一张图存在明 ...

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

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

  9. opencv滤镜-二值化实现黑白滤镜

    黑白滤镜 黑白滤镜非常简单,顾名思义就是图像只有黑色与白色,这实际上就是图像的二值化.实现的原理也非常地简单,设定一个阈值,假设为128,判断每个像素点的灰度值,大于128设为255(对应白色),小于 ...

最新文章

  1. 【Linux 内核 内存管理】Linux 内核内存布局 ② ( x86_64 架构体系内存分布 | 查看 /proc/meminfo 文件 | /proc/meminfo 重要字段解析 )
  2. html页面获取服务器时间,[html]定时获取服务器时间和本地时间
  3. 谈VHDL/Verilog的可综合性以及对初学者的一些建议
  4. 做完项目,对css样式有新发现新感悟
  5. 决定你是富人还是穷人的12条定律
  6. 图片加载库Glide
  7. FreeBSD8下安装软件相关
  8. Kmalloc申请内存源码分析
  9. 华中师范大学计算机考研论坛,2020年华中师范大学计算机考研经验分享
  10. java读取gpx文件,读取GPX文件+optpars的简单python脚本
  11. MRI脑影像分析从哲学到技术:一文搞懂VBM预处理基本原理(全网最详细解析)
  12. oracle创建自增序列
  13. 水滴筹、轻松筹干架,从线上到线下:员工医院互殴引围观
  14. CSDN博客关联码云,点亮码云的G图标
  15. 可以将每日计划以及日程提醒事项记录下来的待办清单便签有哪些
  16. 八芯网线水晶头做法(线序)
  17. 技巧|微信个性签名,汽车手动挡效果,你喜欢这样的吗?
  18. SpringCloud 微服务与远程调用测试
  19. Linux的文件特殊权限
  20. 贪官产生的本质是什么——谈谈人性与制度的博弈未来

热门文章

  1. 李彦宏亲测“自动驾驶汽车”,Apollo(阿波罗)坐镇
  2. 长亭技术专栏 安全攻防技术分享
  3. Linux关机命令总结
  4. 提取HTML代码中文字的C#函数
  5. linux下面的时间设置
  6. python编程django项目django.template.exceptions.TemplateDoesNotExist: registration/login.html解决方法
  7. CSP认证201503-2 数字排序[C++题解]:哈希表、排序、结构体
  8. PAT甲级1103 Integer Factorization (30 分):[C++题解]背包问题,DP解法
  9. 2020年高等数学方法与提高(上海理工大学)学习笔记:常微分方程
  10. 兰州大学萃英学院计算机,兰州大学萃英学院.PDF