在第一部分中我们提到过 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. Android UI开发详解之ActionBar .
  2. LiveData使用和生命感知原理
  3. 关于序列化的 10 几个问题,你顶得住不?
  4. 木七七施辰刚:我是这样将玩家次留提升了 5% 的
  5. VTK:PolyData之ImplicitSelectionLoop
  6. 502 Proxy Error The proxy server received an invalid response from an upstream server
  7. 如何在本地设置www.xxx.com,使其允许访问
  8. 群签名和环签名的区别_苹果企业签名和苹果超级签名的区别
  9. Mybatis使用技巧
  10. Iconfont-阿里巴巴矢量图标库
  11. C++数据结构之图的储存结构——十字链表
  12. 不平凡的2021,末流普本生秋招上岸大厂的历程
  13. 微服务框架dubbo
  14. 【无标题】chatgpt桌面化,桌面应用的安装
  15. 实现DOC、DOCX转换为PDF 再将PDF转换为图片
  16. 世界各大黑客技术论坛TOP排行榜
  17. 基于virtualBox虚拟机构建IOS混合应用打包环境
  18. 情感分类——Attention(前篇)
  19. 员工转正工作总结范文
  20. 无线电磁信道划分及传播方式

热门文章

  1. Linux学习 LVM ***
  2. Class.getResourceAsStream和ClassLoader.getResourceAsStream方法
  3. PowerPC中断系统简介(一)
  4. MySQL用户管理、常用SQL语句、MySQL数据库备份恢复
  5. Linux学习笔记之三
  6. 【转】C++ const用法 尽可能使用const
  7. 获取height固定折叠元素真实高度方法
  8. T-SQL查询——数据集之间的运算
  9. LCD显示原理和驱动方式介绍
  10. 动态规划 dp03 最长公共子串问题 c代码