`
huangyongxing310
  • 浏览: 490740 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

opencv 阈值分割

 
阅读更多
opencv 阈值分割


同的阈值方法”二值化”图像。
使用固定阈值、自适应阈值和Otsu阈值法”二值化”图像
OpenCV函数:cv2.threshold(), cv2.adaptiveThreshold()

自适应阈值是以一个小区域进行的的

固定阈值分割
固定阈值分割很直接,一句话说就是像素点值大于阈值一个值,小于阈值是另外一个值。


cv2.threshold()用来实现阈值分割,ret是return value缩写,代表当前的阈值,暂时不用理会。函数有4个参数:
参数1:要处理的原图,一般是灰度图
参数2:设定的阈值
参数3:最大阈值,一般为255
参数4:阈值的方式,主要有5种,详情:ThresholdTypes
https://docs.opencv.org/3.3.1/d7/d1b/group__imgproc__misc.html#gaa9e58d2860d4afa658ef70a9b1115576


自适应阈值
看得出来固定阈值是在整幅图片上应用一个阈值进行分割,它并不适用于明暗分布不均的图片。cv2.adaptiveThreshold()自适应阈值会每次取图片的一小部分计算阈值,这样图片不同区域的阈值就不尽相同。它有5个参数

th2 = cv2.adaptiveThreshold(
    img, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 11, 4)

参数1:要处理的原图
参数2:最大阈值,一般为255
参数3:小区域阈值的计算方式
ADAPTIVE_THRESH_MEAN_C:小区域内取均值
ADAPTIVE_THRESH_GAUSSIAN_C:小区域内加权求和,权重是个高斯核
参数4:阈值方式(跟前面讲的那5种相同)
参数5:小区域的面积,如11就是11*11的小块
参数6:最终阈值等于小区域计算出的阈值再减去此值


Otsu阈值是一种高效的二值化算法,



# -*-encoding:utf-8-*-
import pytesseract
from PIL import Image
from PIL import ImageFilter
from PIL import ImageFont
from PIL import ImageDraw
import numpy as np
from PIL import Image

import cv2
import matplotlib.pyplot as plt

def main():


    # 颜色空间转换
    img = cv2.imread("learn.jpg")

    img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

    # 阈值分割
    ret, th = cv2.threshold(img_gray, 127, 255, cv2.THRESH_BINARY)
    # cv2.imshow('thresh', th)
    # cv2.waitKey(0)

    # 参数1:要处理的原图,一般是灰度图
    # 参数2:设定的阈值(小于为0,大于为255)
    # 参数3:最大阈值,一般为255
    # 参数4:阈值的方式,主要有5种,详情:ThresholdTypes
    # ret是return value缩写,代表当前的阈值,

    # 应用5种不同的阈值方法
    ret, th1 = cv2.threshold(img_gray, 127, 255, cv2.THRESH_BINARY)
    ret, th2 = cv2.threshold(img_gray, 127, 255, cv2.THRESH_BINARY_INV)
    ret, th3 = cv2.threshold(img_gray, 127, 255, cv2.THRESH_TRUNC)
    ret, th4 = cv2.threshold(img_gray, 127, 255, cv2.THRESH_TOZERO)
    ret, th5 = cv2.threshold(img_gray, 127, 255, cv2.THRESH_TOZERO_INV)
    titles = ['Original', 'BINARY', 'BINARY_INV', 'TRUNC', 'TOZERO', 'TOZERO_INV']
    images = [img, th1, th2, th3, th4, th5]
    # 使用Matplotlib显示
    for i in range(6):
        plt.subplot(2, 3, i + 1)
        plt.imshow(images[i], 'gray')
        plt.title(titles[i], fontsize=8)
        plt.xticks([]), plt.yticks([])  # 隐藏坐标轴
    plt.show()

    # 自适应阈值
    # 看得出来固定阈值是在整幅图片上应用一个阈值进行分割,它并不适用于明暗分布不均的图


    th2 = cv2.adaptiveThreshold(
        img_gray, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 11, 4)
    th3 = cv2.adaptiveThreshold(
        img_gray, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 17, 6)

    titles = ['Original', 'Global(v = 127)', 'Adaptive Mean', 'Adaptive Gaussian']
    images = [img, th1, th2, th3]
    for i in range(4):
        plt.subplot(2, 2, i + 1), plt.imshow(images[i], 'gray')
        plt.title(titles[i], fontsize=8)
        plt.xticks([]), plt.yticks([])
    plt.show()


if __name__ == '__main__':
    main()

分享到:
评论

相关推荐

    opencv 阈值分割的具体使用

    OpenCV中的阈值分割是一种图像处理技术,用于将图像转换为二值或多级阈值图像。这种技术在图像分析、目标检测和模式识别等领域有着广泛的应用。本文将详细介绍OpenCV中阈值分割的几种方法,并通过示例代码进行解析。...

    opencv实现otsu阈值分割

    **OpenCV实现Otsu阈值分割** 在图像处理领域,阈值分割是一种常见的技术,用于将图像划分为前景和背景两部分。Otsu阈值分割法是一种自适应的二值化方法,尤其适用于图像光照不均匀的情况。OpenCV库提供了一种简单而...

    opencv大津法阈值分割

    **OpenCV大津法阈值分割** OpenCV大津法阈值分割是一种广泛应用于图像处理中的二值化技术,尤其在计算机视觉、机器学习和图像分析领域中具有重要地位。该方法是由日本学者大津(Otsu)于1979年提出的,因此被称为...

    基于opencv的otsu阈值分割

    本篇文章将深入探讨如何利用OpenCV实现Otsu阈值分割,并基于`LocalOstu.cpp`代码文件讲解其实现过程。 首先,让我们理解什么是Otsu阈值分割。Otsu算法是基于统计学的一种自动阈值选择方法,由Otsu在1979年提出。它...

    opencv 简单统计法 阈值分割

    本文将深入探讨“opencv 简单统计法 阈值分割”这一主题,包括其基本原理、实现方法以及在实际应用中的优缺点。 阈值分割是图像处理中的基础操作,主要用于将图像二值化,即将图像中的像素点分为两类,通常是前景和...

    最大熵阈值分割(opencv1版本)

    将信息论中的 shannon 熵概念用于...这里参考网友的资料,根据代码在运行过程的错误调试,实现最大熵阈值分割,开发环境VS2012+OpenCV2.4.10,这个是OpenCV1指针操作版本,需要的朋友可以根据自己实际情况配置OpenCV。

    python+opencv实现阈值分割

    ### Python + OpenCV 实现阈值分割 #### 知识点概述 1. **Python与OpenCV集成**:介绍如何将Python与OpenCV相结合来处理图像数据。 2. **阈值分割原理**:阐述阈值分割的基本概念及其在图像处理中的应用。 3. **...

    常用opencv3+Visual Studio12阈值分割代码

    **OpenCV3与Visual Studio 12:阈值分割代码详解** 在计算机视觉领域,阈值分割是一种常见的图像处理技术,用于将图像分为前景和背景两部分。在本教程中,我们将探讨如何使用OpenCV3库和Visual Studio 12进行阈值...

    opencv实现c++的otsu自适应阈值分割的算法描述.docx

    OpenCV实现C++的Otsu自适应阈值分割算法描述 OpenCV是一个功能强大且广泛使用的计算机视觉库,提供了许多实用的图像处理算法和工具。其中,Otsu自适应阈值分割算法是一个常用的图像分割方法,该算法可以自动选择...

    Otsu双阈值分割- opencv

    在**OpenCV**库中,Otsu双阈值分割被用于处理灰度图像。OpenCV是一个强大的计算机视觉库,支持多种编程语言,如C++、Python等,提供了丰富的函数和模块,方便开发者进行图像处理和分析。 具体来说,Otsu算法的步骤...

    阈值分割法提取遥感图像水体

    9. **编程实现**:在实际应用中,通常使用编程语言(如Python、MATLAB)结合图像处理库(如OpenCV、Scikit-image)来实现阈值分割算法。 10. **应用实例**:阈值分割在水资源管理、灾害监测、城市规划等领域有广泛...

    利用OpenCV实现局部动态阈值分割

    OpenCV局部动态阈值分割 OpenCV是一款功能强大的计算机视觉库,为开发者提供了丰富的图像处理功能。本文将详细介绍如何利用OpenCV实现局部动态阈值分割,并对相关的知识点进行详细的解释。 阈值分割 阈值分割是一...

    一个基于OpenCv的图像分割程序

    OpenCV提供了多种图像分割方法,例如阈值分割、区域生长、边缘检测、水平集、GrabCut等。在这个程序中,很可能是结合了图像金字塔和特定的分割算法,如GrabCut或Felzenszwalb和Huttenlocher的分水岭算法,这些算法...

    阈值分割源程序

    阈值分割是图像处理中的一个基础且重要的技术,主要用于将图像划分为不同的区域或对象,以便于后续的分析和识别。在这个"阈值分割源程序"中,我们可以深入理解这一概念及其在实际应用中的实现。 图像分割是图像分析...

    opencv 实现简单的阈值分割,提取线条数据

    本教程将聚焦于如何利用OpenCV实现一个简单的阈值分割任务,以提取图像中的线条数据。我们将通过以下步骤来完成这个过程: 1. **导入必要的库**: 在Python环境中,我们需要首先导入OpenCV库(cv2)以及Numpy库,...

    opencv_opencv阈值_opencv_opencv识别多边形有几条边_

    1. 图像预处理:包括灰度化、平滑滤波(如高斯滤波)以及阈值分割,目的是减少噪声并使图像便于处理。 2. 边缘检测:使用Canny边缘检测或者其他的边缘检测算法,得到可能的边缘线条。 3. 边缘连接与轮廓提取:使用...

    对果实图像进行阈值分割

    本主题聚焦于如何利用OpenCV库处理果实图像,通过颜色空间的阈值分割方法来识别图像中的果实。OpenCV是一个强大的开源计算机视觉库,广泛应用于图像处理和计算机视觉任务。 首先,我们要理解HSV色彩空间。HSV(Hue,...

    自适应阈值分割代码

    在本文中,我们将深入探讨自适应阈值分割的基本原理、OpenCV中的实现方式以及如何通过滑动条进行参数调整。 首先,让我们理解什么是自适应阈值分割。传统的全局阈值分割方法使用单一阈值对整个图像进行分割,但这种...

Global site tag (gtag.js) - Google Analytics