美文网首页
OpenCV+Python图像二值化

OpenCV+Python图像二值化

作者: 音符纸飞机 | 来源:发表于2018-07-09 23:42 被阅读331次

全局二值化

全局设定一个阈值,整个图像中大于这个值的像素设定成一个指定值(max_val_to_set),否则设为0。

# src_img必须是灰度图像
ret, result_img = cv2.threshold(src_img, threshold, max_val_to_set, threshold_type)
# threshold_type 常用的有三种
# THRESH_BINARY, THRESH_BINARY_INV, THRESH_TRUNC
# 返回的ret是Otsu's算法计算出的最佳阈值。
# 返回的图像为uint8

自适应二值化

当图像受到光照影响的时候,由于明暗的关系,全局的阈值效果就很差了。这时候需要每个局部区域都有自己的阈值。

cv2.adaptiveThreshold(src_img, max_val_to_set, adaptive_method, threshold_type, block_size, C)
# adpative_method 有两种:
# cv2.ADAPTIVE_THRESH_MEAN_C 阈值是局部区域的灰度均值
# cv2.ADAPTIVE_THRESH_GAUSSIAN_C 阈值是局部区域内各灰度值根据高斯窗口比重相加的总和
# C是一个常量,用来被计算出的阈值减去

Otsu’s二值化

该算法用于灰度直方图具有明显两个峰值的图像,算法自动计算出存在于两个峰值之间的阈值。

ret, result_img = cv2.threshold(src_img, 0, 255, cv2.THRESH_OTSU)

实例

import cv2
from matplotlib import pyplot as plt

img = cv2.imread('laugh.jpg', cv2.IMREAD_GRAYSCALE)
_, thresh1 = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY)
_, thresh2 = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY_INV)
# 灰度渐变
_, thresh3 = cv2.threshold(img, 127, 255, cv2.THRESH_TRUNC)
thresh4 = cv2.adaptiveThreshold(img, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 5, 0)
thresh5 = cv2.adaptiveThreshold(img, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 91, 0)
thresh6 = cv2.adaptiveThreshold(img, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 5, 0)
thresh7 = cv2.adaptiveThreshold(img, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 91, 0)
ret, thresh8 = cv2.threshold(img, 0, 255, cv2.THRESH_OTSU)
titles = ['Original Image', 'BINARY', 'BINARY_INV', 'TRUNC', 'adaptive_mean_5', 'adaptive_mean_91',
          'adaptive_gaussian_5', 'adaptive_gaussian_91', 'OTSU']
images = [img, thresh1, thresh2, thresh3, thresh4, thresh5, thresh6, thresh7, thresh8]

for i in range(9):
    plt.subplot(3, 3, i + 1), plt.imshow(images[i], 'gray')
    plt.title(titles[i])
    plt.xticks([]), plt.yticks([])

plt.show()
效果图
不同二值化参数的效果图

相关文章

  • OpenCV+Python图像二值化

    全局二值化 全局设定一个阈值,整个图像中大于这个值的像素设定成一个指定值(max_val_to_set),否则设为...

  • opencv+python -- 图像二值化

    图像的二值化就是将图像上的像素点的灰度值设置为0或255,这样将使整个图像呈现出明显的黑白效果。在数字图像处理中,...

  • 2019-05-23 OpenCV学习

    16图像二值化 17超大图像二值化 将超大图像,分块,用局部二值化,或者将图片resize后进行二值化。 或者使用...

  • 二值图像分析之轮廓分析

    图像的二值化 在先前的文章二值图像分析:案例实战(文本分离+硬币计数)中已经介绍过,什么是图像的二值化以及二值化的...

  • openCV:图像的阈值处理

    阈值处理 定义 阈值处理即图像二值化。是图像分割的一种最简单的方法。二值化可以把灰度图像转换成二值图像。把大于某个...

  • 阈值处理

    阈值处理 阈值处理即图像二值化。是图像分割的一种最简单的方法。二值化可以把灰度图像转换成二值图像。把大于某个临界灰...

  • Android 图像灰度化、线性灰度变化、二值化处理方法

    1、图像灰度化: 2、对图像进行线性灰度变化 3、对图像进行二值化

  • CV学习笔记(十二):二值化操作

    在上一篇文章我们学习了模板匹配,在这一篇文章中,我们将会学习图像二值化 一:图像二值化的基本原理 图像二值化就是将...

  • 二值图像分析:案例实战(文本分离+硬币计数)

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

  • 图像二值化与otsu算法介绍

    图像的二值化,就是讲图像变成黑或者白两种颜色。在很多场合,对图像进行二值化,可以忽略图像的颜色信息,背景信息,保留...

网友评论

      本文标题:OpenCV+Python图像二值化

      本文链接:https://www.haomeiwen.com/subject/uxwtpftx.html