python-opencv 图像阈值二值化

本文详细介绍了使用OpenCV-Python进行图像二值化的各种方法,包括简单阈值、自适应阈值、全局图像二值化、局部图像二值化以及Otsu's二值化。通过实例展示了不同方法的效果,并提到了超大图像二值化时的处理策略和注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文讲解基于OpenCV-python的图像二值化API及浅显原理讲解



一. 阈值

在python的OpenCV中,阈值是图像二值化的必要条件,所谓阈值就是设定一个指,对于整张图片来说,大于该值的像素点重赋值为一个值,或者小于该值的像素点重赋值为多少。一般情况下阈值的选取及选取方法决定了二值化的效果。从API层面来看,有两种阈值可选,分别为简单阈值和自适应阈值

1. 简单阈值

简单阈值顾名思义就是由我们给出一个简单的值,这种阈值是由我们给出的,具体的流程为,遍历图像,当像素高与该阈值时,则对该像素点赋值为设定好的值,否则不动。

2. 自适应阈值

自适应阈值是利用API在某部分图像自动计算出的阈值,该阈值大概率情况下效果都要好于自己设定好的阈值。

二. 图像二值化

1. 全局图像二值化

对于该方法opencv提供了我们需要的API

cv2.threshold()

它用来做全局的二值化,即用一个阈值对整个图每张像素点进行操作。
参数及效果会用代码和几张图片来讲解。

图片:
在这里插入图片描述

import cv2 as cv
import numpy as np


def load_image():
    src=cv.imread('num.jpg')
    h,w=src.shape[:2]
    #src=cv.resize(src,(w*2,h*3))
    return src
#全局阈值
def threshold_demo(image):
    gray=cv.cvtColor(image,cv.COLOR_BGR2GRAY)
    #为0则使用自动寻找阈值的选项 使用自动寻找即用|分开。
    ret,binary=cv.threshold(gray,127,255,cv.THRESH_BINARY)#|cv.THRESH_TRIANGLE
    print(ret)
    cv.imshow('same_3',binary)
    cv.waitKey(0)
    cv.destroyAllWindows() 

threshold_demo(load_image())

结果如下:
在这里插入图片描述

显然与我们需要的相差甚远,但是该方法还是需要讲解。

  1. ret,binary=cv.threshold(gray,127,255,cv.THRESH_BINARY)
  2. ret,binary=cv.threshold(gray,127,255,cv.THRESH_BINARY)#|cv.THRESH_TRIANGLE

参数:

  • 灰度图像:在做二值化时我们必要用灰度图像
  • 设定好的阈值
  • 当阈值大于该值时(或小于)像素点赋值为
  • 固定参数方法:cv.THRESH_BINARY 二值化,下图将包含方法及其曲线
  • 可选参数若加该参数则在最后加上一个 |cv.THRESH_TRIANGLE注意那里的|不要丢,选定该方法后,前面设置的阈值将无效,利用方法自动计算阈值
  • 返回值一:计算好或者设定好的阈值
  • 返回值二:处理好的图像
  • 其他的都已经讲过很多遍了就需要多说了。

在这里插入图片描述

2. 局部图像二值化

局部图像二值化要比全局图像二值化的效果好很多,我们在全局图像二值化时,就算设定了自动计算阈值,取得较好的阈值,但是对于直方图有两个波峰的图像来说,其阈值显然只适用于部分的像素点。因此会出现大面积黑或者大面积白的情况。我们来看局部图像二值化的结果。

impo
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值