图像二值化阈值调整——cv2.threshold方法

这篇具有很好参考价值的文章主要介绍了图像二值化阈值调整——cv2.threshold方法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

二值化阈值调整:调整是指在进行图像二值化处理时,调整阈值的过程。阈值决定了将图像中的像素分为黑色和白色的界限,大于阈值的像素被设置为白色,小于等于阈值的像素被设置为黑色。

首先画出灰度直方图:横坐标是灰度值0—255,纵坐标是该灰度值的像素个数。

import cv2
from matplotlib import pyplot as plt

img = cv2.imread ('6.jpg', 0)  # 读取图像并转换为灰度图像
hist = cv2.calcHist([img],[0],None,[256],[0,256])  # 计算灰度直方图
plt.hist(img.ravel( ),256,[0,256])  # 绘制直方图
plt.show()

图像二值化阈值调整——cv2.threshold方法,图像处理,计算机视觉,人工智能

方法一:

取阈值为 127,相当于 0~255 的中位数(0+255)/2 = 127,灰度值大于等于 127 的设置为 0,灰度值大于 127 的设置为 255,这种方法简单便捷,缺点就是阈值设置的太死板了,对于不同的照片,效果肯定不同。检索资料的时候发现,还有人把这种方法称为 史上最弱智的二值处理方法,没办法,弱智方法也得学啊。

该方法会使用到一个 threshold 方法,threshold 方法的语法格式如下:

cv2.threshold(src, thresh, maxval, type[, dst]) -> retval, dst

参数说明如下:

  • src 输入图,中只能输入单通道图,一般就是灰度图;
  • thresh 阈值;
  • maxval 最大值,当像素超过了阈值(或者小于阈值)时所赋予的值;
  • type - 二值化操作的类型,有 5 种,在下文描述;
  • dst 输出数组/图像(与 src 相同大小和类型以及相同通道数的数组/图像)。

返回值 retval 阈值 thresh, dst 经过处理的图像。

二值化操作类型type参数(阈值类型):

  • 二进制阈值化   THRESH_BINARY,过门限的值为最大值,其他值为 0;
  • 反二进制阈值化   THRESH_BINARY_INV,过门限的值为 0,其他值为最大值;
  • 截断阈值化   THRESH_TRUNC,过门限的值为门限值,其他值不变;
  • 阈值化为 0   THRESH_TOZERO,过门限的值不变,其他设置为 0;
  • 反阈值化为 0   THRESH_TOZERO_INV,过门限的值为 0,其他不变。

以上内容也叫做全局阈值。参考代码:

import cv2
import matplotlib.pylab as plt

def main2():
    img = cv2.imread('6.jpg', 0)
    ret, thresh1 = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY)
    ret, thresh2 = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY_INV)
    ret, thresh3 = cv2.threshold(img, 127, 255, cv2.THRESH_TRUNC)
    ret, thresh4 = cv2.threshold(img, 127, 255, cv2.THRESH_TOZERO)
    ret, thresh5 = cv2.threshold(img, 127, 255, cv2.THRESH_TOZERO_INV)

    titles = ['Original Image', 'BINARY',
              'BINARY_INV', 'TRUNC', 'TOZERO', 'TOZERO_INV']
    images = [img, thresh1, thresh2, thresh3, thresh4, thresh5]

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

    plt.show()

main2()

图像二值化阈值调整——cv2.threshold方法,图像处理,计算机视觉,人工智能

当然,也可以把代码里面的127改成别的,这就叫手动选择阈值。

方法二:

计算像素点矩阵中的所有像素点的灰度值的平均值 avg,让每一个像素点与 avg 比较,小于等于 avg 的像素点就为 0(黑色),大于 avg 的像素点为 255(白色),这种方法看起来靠谱了一些。

使用该方法之前需要先遍历图像的所有灰度值,才能计算出平均值。下图所示的阈值计算结果是151.参考代码如下:

import cv2

def main():
    img = cv2.imread("1.TIF", 0)
    
    height, width = img.shape
    # 灰度值总和
    px_t = 0
    for i in range(height):
        for j in range(width):
            px_t += img[i][j]
    print(px_t)
    # 求像素平均值
    avg_thresh = int(px_t / (height * width))
    print(avg_thresh)
   
    thresh, dst = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY)
    cv2.imshow("dst", dst)
    cv2.waitKey()
    cv2.imwrite("2.jpg",dst)

if __name__ == "__main__":
    main()

图像二值化阈值调整——cv2.threshold方法,图像处理,计算机视觉,人工智能文章来源地址https://www.toymoban.com/news/detail-739300.html

到了这里,关于图像二值化阈值调整——cv2.threshold方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • opencv(20) 图像阈值(二值化)

    二值化核心思想,设阈值,大于阈值的为0(黑色)或 255(白色),使图像称为黑白图。 阈值可固定,也可以自适应阈值。 自适应阈值一般为一点像素与这点为中序的区域像素平均值或者高斯分布加权和的比较,其中可以设置一个差值也可以不设置。 图像的阈值化旨在提取

    2024年02月02日
    浏览(50)
  • 【OpenCV常用函数:颜色空间转换、阈值化】cv2.cvtColor()+cv2.threshold()

    对图像进行颜色空间的转换 对图像进行阈值化/二值化

    2024年02月13日
    浏览(59)
  • 图像二值化处理(全局阈值 自适应阈值 手动阈值操作以及直方图画法)

    图像二值化就是把让图像的像素点只有0和1(只有黑白两各种颜色,黑是背景,白是前景),关键点是寻找一个阈值T,使图像中小于阈值T的像素点变为0,大于T的像素点变为255。下面介绍的就是寻找一个图像的阈值T的方法。(主要根据直方图) retval:返回的阈值(double类型)

    2024年02月08日
    浏览(49)
  • 【C++ OpenCV】阈值二值化、阈值反二值化、截断、阈值取零、阈值反取零、自适应阈值使用方法以及时机

    阈值:简单来说就是一把分割图像像素的标尺,在二值化处理中有固定阈值和自适应阈值两种形式。 那么什么时候用固定阈值,什么时候使用自适应阈值呢? 答:当图像 质量较好 ,且目标和背景容易区分时,可以采用固定阈值 当图像 质量差 ,且有 阴影过度 ,虽然使用大

    2024年02月07日
    浏览(50)
  • 深入理解 OpenCV 中的二值化:cv2.THRESH_BINARY 与 cv2.THRESH_OTSU 的组合运用

    引言 在图像处理和计算机视觉中,二值化是一种常见的图像处理技术,用于将图像转换为只有两种可能取值的图像,通常是黑白。OpenCV 提供了一种强大的工具来实现图像二值化,即 cv2.threshold() 函数。本篇博客将深入介绍 cv2.THRESH_BINARY 和 cv2.THRESH_OTSU 的组合使用,以及它们对

    2024年02月05日
    浏览(46)
  • 【GEE笔记】最大类间方差法(otsu、大津法)算法实现——计算阈值、图像二值化分割

    1、最大类间方差法原理概述 2、GEE频率分布统计,直方图绘制 3、算法具体实现,以GEE JavaScript版本为例 4、目标像元提取,以遥感影像提取水体为示例 最大类间方差法(又名otsu、大津法)是由日本学者OTSU于1979年提出的一种对图像进行二值化的高效算法。算法假定该图像根据

    2024年02月06日
    浏览(57)
  • 基于FPGA的图像自适应阈值二值化算法实现,包括tb测试文件和MATLAB辅助验证

    目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1Otsu方法 4.2 Adaptive Thresholding方法 4.3、FPGA实现过程 5.算法完整程序工程 Vivado2019.2 matlab2022a        图像二值化是数字图像处理中的一种常见技术,可以将灰度图像转换为黑白二值图像,突出图像

    2024年02月08日
    浏览(44)
  • 009 OpenCV 二值化 threshold

    本文使用环境为: Windows10 Python 3.9.17 opencv-python 4.8.0.74 在机器视觉应用中,OpenCV的二值化函数threshold具有不可忽视的作用。主要的功能是将一幅灰度图进行二值化处理,以此大幅降低图像的数据量,从而突显出目标的轮廓。 具体来说,函数threshold可以将图像上的像素根据阈值

    2024年02月05日
    浏览(46)
  • opencv中调整图像显示框大小,cv2.namedWindow()

    如果要要调整cv2.imshow显示出来的窗口大小, 需要使用 cv2.namedWindow(‘窗口标题’, 默认参数) 参数 cv2.imshow(‘窗口标题’,image),如果前面没有cv2.namedWindow,就自动先执行一个cv2.namedWindow() 窗口默认cv2.WINDOW_AUTOSIZE namedWindow函数的作用是通过指定的名字,创建一个可以作为图像和

    2024年02月16日
    浏览(46)
  • 图像二值化(一)

      继《图像灰度处理》后,我们继续讨论图像处理的其他基本操作——图像二值化处理。   图像二值化是将像素点的灰度值设为0或255,使图像呈现明显的黑白效果。二值化之前需要把图像进行灰度处理。图像选用的是最近很火的ChatGPT标志。   Threshold为全局阈值,但是

    2024年02月07日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包