opencv—图像阈值设置

1、简单阈值设置

     像素值高于阈值时,给这个像素赋予一个新值(可能是白色),否则我们给它赋予另外一种颜色(也许是黑色)。这个函数就是 cv2.threshhold()。这个函数的第一个参数就是原图像,原图像应该是灰度图。第二个参数就是用来对像素值进行分类的阈值。第三个参数就是当像素值高于(有时是小于)阈值时应该被赋予的新的像素值。 OpenCV提供了多种不同的阈值方法,这是有第四个参数来决定的。这些方法包括: 
• cv2.THRESH_BINARY 
• cv2.THRESH_BINARY_INV 
• cv2.THRESH_TRUNC 
• cv2.THRESH_TOZERO 
• cv2.THRESH_TOZERO_INV 

这个函数有两个返回值,第一个为 retVal,我们后面会解释。第二个就是阈值化之后的结果图像了. 

import cv2 as cv


def binary_img_demo(img):
    gray = cv.cvtColor(img,cv.COLOR_BGR2GRAY)
    ret, binary = cv.threshold(gray, 0, 255, cv.THRESH_BINARY | cv.THRESH_OTSU)
    print(ret)
    cv.imshow("binary", binary)


src = cv.imread("./../img/8.png") # 读取图像
cv.namedWindow("input img", cv.WINDOW_AUTOSIZE)
cv.imshow("input img", src) # 显示图像

binary_img_demo(src)
cv.waitKey(0)
cv.destroyAllWindows()

    ret, binary = cv.threshold(gray, 0, 255, cv.THRESH_TOZERO)

    ret, binary = cv.threshold(gray, 0, 255, cv.THRESH_TRIANGLE)

 

2 、自适应阈值 

     在前面的部分我们使用是全局阈值,整幅图像采用同一个数作为阈值。但是这种方法并不适应与所有情况,尤其是当同一幅图像上的不同部分的具有不同亮度时。这种情况下我们需要采用自适应阈值。此时的阈值是根据图像上的每一个小区域计算与其对应的阈值。因此在同一幅图像上的不同区域采用的是不同的阈值,从而使我们能在亮度不同的情况下得到更好的结果。这种方法需要我们指定三个参数,返回值只有一个。 
• Adaptive Method- 指定计算阈值的方法。 
– cv2.ADPTIVE_THRESH_MEAN_C:阈值取自相邻区域的平均值 
– cv2.ADPTIVE_THRESH_GAUSSIAN_C:阈值取值相邻区域的加权和,权重为一个高斯窗口。 
• Block Size - 邻域大小(用来计算阈值的区域大小)。 
• C - 这就是是一个常数,阈值就等于的平均值或者加权平均值减去这个常数。 
 

先来个简单的自定义

import cv2 as cv


def binary_img_demo(img):
    gray = cv.cvtColor(img,cv.COLOR_BGR2GRAY)
    ret, binary = cv.threshold(gray, 75, 255, cv.THRESH_BINARY)
    print(ret)
    cv.imshow("binary", binary)


src = cv.imread("./../img/8.png") # 读取图像
cv.namedWindow("input img", cv.WINDOW_AUTOSIZE)
cv.imshow("input img", src) # 显示图像

binary_img_demo(src)
cv.waitKey(0)
cv.destroyAllWindows()

来个高级的

import cv2 as cv


def binary_img_demo(img):
    gray = cv.cvtColor(img,cv.COLOR_BGR2GRAY)
    binary = cv.adaptiveThreshold(gray,255, cv.ADAPTIVE_THRESH_GAUSSIAN_C, cv.THRESH_BINARY, 11, 2)
    cv.imshow("binary", binary)


src = cv.imread("./../img/8.png") # 读取图像
cv.namedWindow("input img", cv.WINDOW_AUTOSIZE)
cv.imshow("input img", src) # 显示图像

binary_img_demo(src)
cv.waitKey(0)
cv.destroyAllWindows()

 

binary = cv.adaptiveThreshold(gray,255, cv.ADAPTIVE_THRESH_MEAN_C, cv.THRESH_BINARY, 11, 2)

更改一下值,效果会更好 

    binary = cv.adaptiveThreshold(gray,255, cv.ADAPTIVE_THRESH_MEAN_C, cv.THRESH_BINARY, 25, 10)

    binary = cv.adaptiveThreshold(gray,255, cv.ADAPTIVE_THRESH_GAUSSIAN_C, cv.THRESH_BINARY, 25, 10)

3、超大图像二值化 

超大图像二值化的方法:分块、全局阈值与局部阈值

import cv2 as cv


def big_img_binary(img):
    h, w = img.shape[:2]
    ch = 256
    cw = 256
    gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
    for row in range(0, h, ch):
        for col in range(0, w, cw):
            roi = gray[row:row + ch, col:col + cw]
            dst = cv.adaptiveThreshold(roi, 255, cv.ADAPTIVE_THRESH_GAUSSIAN_C, cv.THRESH_BINARY, 127, 20)
            gray[row:row + ch, col: col + cw] = dst
    cv.imshow("big_img_binary/", gray)


src = cv.imread("./../img/b.jpg") # 读取图像
cv.namedWindow("input img", cv.WINDOW_AUTOSIZE)
big_img_binary(src)
cv.waitKey(0)
cv.destroyAllWindows()

4 、Otsu’s 二值化

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
OpenCV是一个广泛用于计算机视觉和机器学习的开源库,其中包含许多图像处理功能,包括阈值化。阈值化是将一幅灰度或彩色图像转换成二值图像的过程,主要是为了简化图像,突出感兴趣的区域,便于进一步分析。 在OpenCV中,你可以使用`cv.threshold()`函数来进行阈值操作。这个函数的基本语法如下: ```python threshold(src, dst, threshold_value, maxval, type) ``` 参数解释: - `src`: 输入的图像数据(通常是灰度或单通道彩色图像)。 - `dst`: 输出的阈值化结果图像。 - `threshold_value`: 阈值值,通常为0(如果设置为0,函数会选择适当的内部阈值)。 - `maxval`: 输出值的最大值(对于二值化,这通常为255,0表示背景,255表示前景)。 - `type`: 阈值类型,常见的有以下几个: - `cv.THRESH_BINARY`: 黑白阈值(大于阈值的部分设为最大值,否则设为0)。 - `cv.THRESH_BINARY_INV`: 反相黑白阈值(大于阈值的部分设为0,否则设为最大值)。 - `cv.THRESH_TRUNC`: 剪切,超出阈值部分被截断到最大值。 - `cv.THRESH_TOZERO` 和 `cv.THRESH_TOZERO_INV`: 分别将小于阈值的部分设为0,大于等于阈值的部分保持不变;反之亦然。 使用这个函数后,你可以根据不同的阈值类型和应用场景调整图像内容,以便于后续的任务如边缘检测、物体分割等。如果你有具体的需求或遇到问题,可以提出相关的问题,我会帮助解答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值