图像二值化处理时图像处理过程中非常常见的一种操作,在python中比较常用的主要是opencv,pil两个第三库,对比来看的话,opencv使用要更加的方便灵活,
文本主要介绍以下基于opencv的图像二值化处理方法。
     首先我们来看一种比较简单的图像二值化处理方法。

全局阈值二值化

主要思路就是设置一个阈值,低于该阈值的像素置为0(黑色),高于该阈值的像素置为255(白色),下面来看代码

def image_binarization(img):# 将图片转为灰度图gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)# retval, dst = cv2.threshold(gray, 110, 255, cv2.THRESH_BINARY)# 最大类间方差法(大津算法),thresh会被忽略,自动计算一个阈值retval, dst = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)cv2.imwrite('binary.jpg', dst)

cv2.threshold(src, thresh, maxval, type)

  • src:表示的是图片源
  • thresh:表示的是阈值(分割值)
  • maxval:表示的是最大值
  • type:表示的是这里划分的时候使用的是什么类型的算法,包含以下几种


该函数有两个返回值,第一个retVal(得到的阈值),第二个就是阈值化后的图像。

上述方法较为简单,且运算效率较高,但是存在一个问题,如果你想批量处理一批文本图片,有的图片文本较深,有的图片文本较浅,那么你设置一个单一的阈值就会存在问题,如果阈值较小,那么颜色较浅的文本图片二值化过后内容会丢失,如果阈值较大,图片二值化处理后,文本内容很可能和背景融为一体较难区分。

阈值设置为70

            

处理前                                                                   处理后

阈值设置为110

                  

处理前                                                                   处理后

大津算法
cv2.threshold处理上述5种算子之外,还提供了一种可以根据图片像素自动计算阈值的一种方法,cv2.THRESH_OTSU(最大类间方差法,也叫大津算法),thresh会被忽略,自动计算一个阈值。

 retval, dst = cv2.threshold(gray, 0, 255,  cv2.THRESH_BINARY | cv2.THRESH_OTSU)

 

处理前                                                                  处理后

虽然该算子可以在一定程度上可以解决上述问题,但是该算子对于比较复杂的图片处理效果还是很不理想,尤其是一些明暗差异较大的图片,下面记录一种可以局部自适应的二值化的方法

局部阈值二值化

为了解决我们上述所说的问题,我们可以采用cv2.adaptiveThreshold方法进行二值化处理,函数的大致意思是以图片中的每个像素点为中心取他周围n*n的范围内的像素,然后根据这个区域内的像素值来计算出来一个阈值,决定当前像素点是处理成0还是255。

主要包含以下几个步骤

1. 加载图像
2. 转灰度图
3. 图像预处理(根据个人需求进行处理)
4. 二值化处理
5. 降噪(根据个人需求进行处理)

def image_binarization_part_situation(img):'''局部二值化:return:'''# 转灰度图gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)# 图像压缩(非必要步骤)new_gray = np.uint8((255 * (gray/255.0)**1.4))# 二值化dst = cv2.adaptiveThreshold(new_gray, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 15, 1)# 中值滤波img_median = cv2.medianBlur(dst, 5)

核心函数

cv2.adaptiveThreshold(src, maxValue, adaptiveMethod, thresholdType, blockSize, C, dst=None)

src:需要进行二值化的一张灰度图像

maxValue:满足条件的像素点需要设置的灰度值。(将要设置的灰度值)

adaptiveMethod:自适应阈值算法。可选ADAPTIVE_THRESH_MEAN_C 或 ADAPTIVE_THRESH_GAUSSIAN_C

thresholdType:opencv提供的二值化方法,只能THRESH_BINARY或者THRESH_BINARY_INV

blockSize:要分成的区域大小,上面的N值,取奇数

C:常数,每个区域计算出的阈值的基础上在减去这个常数作为这个区域的最终阈值,可以为负数

dst:输出图像,可以忽略

                

Python - OpenCV 图像二值化处理相关推荐

  1. python opencv图像二值化函数_python opencv 二值化 计算白色像素点的实例

    python opencv 二值化 计算白色像素点的实例 贴部分代码 #! /usr/bin/env python # -*- coding: utf-8 -*- import cv2 import ...

  2. OpenCV图像二值化,Python

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

  3. OpenCV+python:图像二值化

    1,图像二值化概念及方法 一个像素点的颜色是由RGB三个值来表现的,所以一个像素点矩阵对应三个颜色向量矩阵,分别是R矩阵,G矩阵,B矩阵,它们也都是同样大小的矩阵. 在图像处理中,用RGB三个分量(R ...

  4. 基于python的图像二值化处理(opencv)

    图像二值化处理 (python-opencv) 二值化 图像的二值化,在图像处理中是十分重要的一个步骤.是几乎所有后续的图像处理的基础和前提.只有根据不同场景选择不同的二值化处理,才能对一幅图片较好的 ...

  5. OpenCV-Python学习(10)—— OpenCV 图像二值化处理(cv.threshold)

    1. 学习目标 理解图像的分类,不同类型的图像的区别: 对图像进行二值化处理,对[ cv.threshold ]函数的理解. 2. 图像分类 2.1 不同类型图像说明 按照颜色对图像进行分类,可以分为 ...

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

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

  7. python对图像二值化_python如何二值化图像

    在python中二值化图像的方法:首先将图片转化为灰色图像:然后自定义灰度界限:最后输入"photo=Img.point(table,'1')"命令(table为自己创建的数组名) ...

  8. python3 opencv 图像二值化笔记(cv2.adaptiveThreshold)

    前一篇研究了opencv二值化方法threshold的使用,但是这个方法也存在一定的局限性,假如有一张图存在明显的明暗不同的区域,如下图 可以看到左边部分因为整体偏暗,导致二值化后变成全黑,丢失了所有 ...

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

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

  10. OpenCV-Python 图像二值化

    OpenCV-Python 图像二值化 一.什么是图像二值化 二.图像二值化 Ⅰ先获取阈值: Ⅱ根据阈值去二值化图像 ⅢOpenCV中的二值化方法 三.全局阈值函数cv2.threshold · 函数 ...

最新文章

  1. windows10 自动开机、关机
  2. 64岁Python之父:退休生活太无聊,我要加入微软,将开源进行到底
  3. Curator实现分布式锁的基本原理-InterProcessMutex.internalLock
  4. spring相关API
  5. 极客大挑战2020_CTF-Web-[极客大挑战 2019]HardSQL
  6. 动态加载类的原理——元数据的使用
  7. [html] 说说你对H5的ServiceWorker的理解,它有什么运用场景?
  8. 12.history的用法
  9. 适用于特殊类型自然语言分类的自适应特征谱神经网络
  10. 177. Nth Highest Salary
  11. PLC 控制三相异步电动机正反转实验
  12. 阿尔泰USB5630数据采集卡
  13. 【win11】你不能不会的技巧(持续更新)
  14. ilm 和dlm差异_价值观异质性对团队绩效的影响机制研究 ———团队互动的中介作用与DLMX的调节效应(上)...
  15. 小微信贷传统风控模型的痛点
  16. 《离别小叙》一个感伤的程序员
  17. 06-08 无人机怎么拍摄VR全境图?
  18. ZZULIOJ:1001植树问题
  19. 微信小程序横屏字体变大的完美解决方案
  20. 繁体中文和简体中文编码

热门文章

  1. 【SQL Server】用SQL命令建立数据库和表
  2. Mongo 多语言模糊匹配
  3. Python库pygame下载教程
  4. python pygame 的下载方法
  5. JAVA API中文在线帮助文档
  6. 某互联网公司针对初级Java开发的几道Sql笔试题(看完保证不亏 )
  7. 复杂的拉普拉斯逆变换
  8. 湖工微型计算机及原理题目,2017年湖北工业大学电气与电子工程学院942微机原理与应用考研导师圈点必考题汇编...
  9. 华硕 PRIME H410M-K + i5-10400F 黑苹果 EFI文件
  10. 系统视频教学视频教程_Amesim综合液压系统视频教程专题更新通知