OpenCV图像处理之图像的二值化解读

 更新时间:2023年02月20日 17:01:30   作者:B.Bz  
这篇文章主要介绍了OpenCV图像处理之图像的二值化解读,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

图像二值化( Image Binarization)就是将图像上的像素点的灰度值设置为0或255,也就是将整个图像呈现出明显的黑白效果的过程。

二值化的原理

import cv2

img = cv2.imread('img/lena.jpg')
# 转为灰度图
new_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
height, width = new_img.shape[0:2]

# 设置阈值
thresh = 60

# 遍历每一个像素点
for row in range(height):
    for col in range(width):
        # 获取到灰度值
        gray = new_img[row, col]
        # 如果灰度值高于阈值 就等于255最大值
        if gray > thresh:
            new_img[row, col] = 255
        # 如果小于阈值,就直接改为0
        elif gray < thresh:
            new_img[row, col] = 0

cv2.imshow('img', new_img)
cv2.waitKey()

OpenCV提供的图像二值化API

threshold()方法参数:

  • 图片矩阵
  • 阈值
  • 图片中的最大值
  • 二值化的方式

二值化的方式:

THRESH_BINARY高于阈值改为255,低于阈值改为0
THRESH_BINARY_INV高于阈值改为0,低于阈值改为255
THRESH_TRUNC截断,高于阈值改为阈值,最大值失效
THRESH_TOZERO高于阈值不改变,低于阈值改为0
THRESH_TOZERO_INV高于阈值该为0,低于阈值不改变
import cv2

img = cv2.imread('img/lena.jpg', cv2.IMREAD_GRAYSCALE)

thresh, new_img = cv2.threshold(img, 60, 255, cv2.THRESH_BINARY)

print(thresh)
cv2.imshow('img', img)
cv2.imshow('NEW_IMG', new_img)
cv2.waitKey()

自适应阈值

使用一个全局值作为阈值。但是在所有情况下这可能都不太好。

如果图像在不同区域具有不同的照明条件。

在这种情况下,自适应阈值阈值可以帮助。这里,算法基于其周围的小区域确定像素的阈值。

因此,我们为同一图像的不同区域获得不同的阈值,这为具有不同照明的图像提供了更好的结果。

adaptlive()方法参数:

  • 1.图片矩阵
  • 2.图片灰度最大值
  • 3.计算阈值的方法
  • 4.阈值类型
  • 5.处理块大小
  • 6.算法所用的常量C

cv2.ADAPTIVE_THRESH_MEAN_C:该阈值是该附近区域减去恒定的平均Ç。

cv2.ADAPTIVE_THRESH_GAUSSIAN_C:阈值是邻域值减去常数C的高斯加权和。

import cv2

img = cv2.imread('img/lena.jpg', cv2.IMREAD_GRAYSCALE)

thresh_img = cv2.adaptiveThreshold(img, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 11, 5)

cv2.imshow('thresh_img', thresh_img)
cv2.waitKey()

大津算法(最大类间方差法)

图像分割中阈值选取的最佳算法

threshold(gaussian_img, 0, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU)
import cv2

img = cv2.imread('img/lena.jpg', cv2.IMREAD_GRAYSCALE)

# 使用255的阈值进行二值化
ret, thresh_img = cv2.threshold(img, 255, 255, cv2.THRESH_BINARY)
cv2.imshow('normal', thresh_img)

# 使用高斯滤波模糊图像  参数1: 图片矩阵  参数2:卷积核 参数3: 越大越模糊
gaussian_img = cv2.GaussianBlur(img, (5, 5), 0)
cv2.imshow('gaussian_img', gaussian_img)

# 使用大津算法0阈值二值化经过高斯滤波模糊后的图像
ret, thresh_img = cv2.threshold(gaussian_img, 0, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU)

cv2.imshow('otsu', thresh_img)

cv2.imshow('img', img)
cv2.waitKey()

原图:

使用255的阈值进行二值化 图片全黑了:

使用高斯滤波模糊图像:

图片矩阵卷积核越大越模糊

使用0阈值的大津算法二值化经过高斯滤波模糊后的图像:

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • python thread 并发且顺序运行示例

    python thread 并发且顺序运行示例

    以上源文件是对python中的线程的一个简单应用,实现了对并发线程的顺序运行,也许对你会有小小帮助
    2009-04-04
  • Matplotlib绘图基础之坐标轴详解

    Matplotlib绘图基础之坐标轴详解

    Matplotlib的坐标轴是用于在绘图中表示数据的位置的工具,也是为了帮助观察者了解图像中数据的位置和大小,下面小编就来和大家详细聊聊Matplotlib绘图时坐标轴的具体使用吧
    2023-07-07
  • Python连接Oracle的多种方式小结

    Python连接Oracle的多种方式小结

    Oracle数据库是一种强大的企业级关系数据库管理系统(RDBMS),而Python是一门流行的编程语言,两者的结合可以提供出色的数据管理和分析能力,本教程将详细介绍如何在Python中连接Oracle数据库,需要的朋友可以参考下
    2024-08-08
  • 关于你不想知道的所有Python3 unicode特性

    关于你不想知道的所有Python3 unicode特性

    我的读者知道我是一个喜欢痛骂Python3 unicode的人。这次也不例外。我将会告诉你用unicode有多痛苦和为什么我不能闭嘴。我花了两周时间研究Python3,我需要发泄我的失望。在这些责骂中,仍然有有用的信息,因为它教我们如何来处理Python3。如果没有被我烦到,就读一读吧
    2014-11-11
  • ubuntu20.04运用startup application开机自启动python程序的脚本写法

    ubuntu20.04运用startup application开机自启动python程序的脚本写法

    这篇文章主要介绍了ubuntu20.04运用startup application开机自启动python程序的脚本写法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-10-10
  • python实现线程池的方法

    python实现线程池的方法

    这篇文章主要介绍了python实现线程池的方法,实例分析了Python线程池的原理与相关实现技巧,需要的朋友可以参考下
    2015-06-06
  • Pandas中DataFrame的分组/分割/合并的实现

    Pandas中DataFrame的分组/分割/合并的实现

    这篇文章主要介绍了Pandas中DataFrame的分组/分割/合并的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-07-07
  • python-jwt用户认证食用教学的实现方法

    python-jwt用户认证食用教学的实现方法

    这篇文章主要介绍了python-jwt用户认证食用教学的实现方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-01-01
  • Python中django学习心得

    Python中django学习心得

    这篇文章主要介绍了Python中django Web应用框架的学习做了总结并把心得体会写了一下,大家一起参考下吧。
    2017-12-12
  • 如何使用python传入不确定个数参数

    如何使用python传入不确定个数参数

    这篇文章主要介绍了如何使用python传入不确定个数参数,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-02-02

最新评论