关于python3 opencv 图像二值化的问题(cv2.adaptiveThreshold函数)

关于python3 opencv 图像二值化的问题(cv2.adaptiveThreshold函数):

简介

图像二值化是一种将灰度图像转换为黑白二值图像的过程,即将像素点的灰度值转换为0或255,使图像中只有黑白两色。这种操作在机器视觉、图像处理中经常用到,如字符识别、边缘检测等。

Python中的OpenCV库提供了cv2.adaptiveThreshold函数用于进行图像二值化。该函数可以在局部区域内自适应地进行二值化操作,因此更适用于处理复杂的图像。

函数参数

cv2.adaptiveThreshold(src, maxValue, adaptiveMethod, thresholdType, blockSize, C[, dst]) -> dst

其中:

  • src: 输入图像,需为灰度图像
  • maxValue: 二值化后的最大值,若当前像素值高于指定的阈值则被赋值为该值
  • adaptiveMethod: 自适应阈值算法,取值为cv2.ADAPTIVE_THRESH_MEAN_C或cv2.ADAPTIVE_THRESH_GAUSSIAN_C
  • thresholdType: 阈值类型,取值为cv2.THRESH_BINARY或cv2.THRESH_BINARY_INV
  • blockSize: 自适应区域大小,必须为奇数且大于1
  • C:从均值中减去的值

示例1

下面是一个简单的示例,展示了如何使用cv2.adaptiveThreshold函数对一张图像进行二值化:

import cv2

img = cv2.imread('original_image.jpg')

gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

thresholded = cv2.adaptiveThreshold(gray, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, blockSize=11, C=2)

cv2.imshow('thresholded', thresholded)
cv2.waitKey()
cv2.destroyAllWindows()

在这个示例中,我们先读入一张彩色图像,将其转换为灰度图像,然后使用cv2.adaptiveThreshold函数对其进行二值化操作。函数中的参数说明如下:

  • maxValue设为255,即二值化后的最大值为255
  • adaptiveMethod取值为cv2.ADAPTIVE_THRESH_MEAN_C,即使用均值对局部区域进行自适应的二值化操作
  • thresholdType取值为cv2.THRESH_BINARY,即二值化操作以像素值>=阈值时反白显示
  • blockSize设为11,表示自适应区域大小为11*11的像素块
  • C设为2,表示从均值中减去2作为阈值

示例2

下面再演示一个在实际应用中常见的场景,即对二维码图片进行二值化:

import cv2

img = cv2.imread('qrcode.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# 简单的阈值
_, thresholded_simple = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)

# 自适应阈值
thresholded_adaptive = cv2.adaptiveThreshold(gray, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, blockSize=7, C=15)

cv2.imshow('thresholded_simple', thresholded_simple)
cv2.imshow('thresholded_adaptive', thresholded_adaptive)
cv2.waitKey()
cv2.destroyAllWindows()

在这个示例中,我们先读入一张二维码图片,将其转换为灰度图像,然后使用cv2.threshold函数进行简单阈值处理,再使用cv2.adaptiveThreshold函数进行自适应阈值处理。其中,自适应阈值处理中的参数blockSize设为7,表示自适应区域大小为7*7的像素块;参数C设为15,表示从均值中减去15作为阈值。

通过对比以上两种二值化处理结果,可以发现自适应阈值处理能够更好地保留二维码图案的细节特征。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:关于python3 opencv 图像二值化的问题(cv2.adaptiveThreshold函数) - Python技术站

(0)
上一篇 2023年5月25日
下一篇 2023年5月25日

相关文章

  • Ubuntu20.04安装cuda10.1的步骤(图文教程)

    下面是Ubuntu20.04安装cuda10.1的步骤详细攻略: 1. 准备工作 操作系统:Ubuntu 20.04 显卡驱动:建议使用官方推荐驱动或更高版本 CUDA版本:CUDA 10.1 2. 下载并安装CUDA Toolkit 首先从Nvidia官网上下载CUDA Toolkit 10.1,可以通过WGET命令或浏览器下载,这里以WGET命令为例: …

    人工智能概论 2023年5月24日
    00
  • 什么是MEAN?JavaScript编程中的MEAN是什么意思?

    MEAN是JavaScript编程中的一个技术栈,它包含了四个技术领域的理念:MongoDB、Express.js、AngularJS、Node.js。下面我来详细讲解一下这四个技术领域对于MEAN的意义和重要作用。 MongoDB MongoDB是一个面向文档的数据库,可以帮助我们存储和管理数据。它非常灵活,可以处理非结构化数据和大规模数据。在MEAN技术…

    人工智能概论 2023年5月24日
    00
  • django中上传图片分页三级联动效果的实现代码

    下面我将为你详细讲解 “django中上传图片分页三级联动效果的实现代码” 的完整攻略。 一、前言 在实现django中的上传图片分页三级联动效果之前,我们需要先了解一些基础知识。具体而言,包括django中的文件上传,分页技术以及三级联动效果的实现等等。如果你对这些概念还不是很清楚,请先完成相关的学习。 二、文件上传功能 1. 安装依赖库 在实现djang…

    人工智能概论 2023年5月25日
    00
  • 可视化pytorch 模型中不同BN层的running mean曲线实例

    让我来为您详细讲解一下“可视化pytorch模型中不同BN层的running mean曲线实例”的攻略。 1. 什么是BatchNorm? BatchNorm,即Batch Normalization,是一种常用的深度学习网络加速和优化的技巧。BatchNorm可以对每一层的输入数据进行归一化,使得数据分布更加稳定,从而加速网络的训练过程。 2. BN层的r…

    人工智能概论 2023年5月25日
    00
  • Keepalived实现Nginx负载均衡高可用的示例代码

    Keepalived实现Nginx负载均衡高可用的示例代码 什么是Keepalived Keepalived是一款用于实现LVS负载均衡的软件,主要实现了VRRP协议以及Health Check功能。通过使用Keepalived,可以使一组服务器实现负载均衡和高可用性。 Keepalived实现Nginx负载均衡高可用的实现过程 安装Nginx 首先,我们需…

    人工智能概览 2023年5月25日
    00
  • 指针操作数组的两种方法(总结)

    下面我就来详细讲解“指针操作数组的两种方法(总结)”的完整攻略。 什么是指针操作数组? 指针操作数组是指通过指针变量对数组进行操作的一种方式。指针变量存储的是一个地址,该地址指向数组的第一个元素,通过指针变量可以对数组进行遍历、访问、修改等操作。 方法1:指针通过数组名操作数组 指针通过数组名操作数组是指定义一个指向数组的指针变量,然后通过该指针变量对数组进…

    人工智能概览 2023年5月25日
    00
  • 分布式医疗挂号系统EasyExcel导入导出数据字典的使用

    分布式医疗挂号系统EasyExcel导入导出数据字典的使用 简介 分布式医疗挂号系统是一款以医院挂号业务为主线,为广大患者提供线上看病、在线咨询、预约挂号、处方购买等全方位一站式服务的医疗系统。数据字典是该系统中重要的文档,用于记录系统中各种实体和字段的相关信息,方便管理和开发人员查看和使用。本文主要介绍EasyExcel导入导出数据字典的使用。 什么是Ea…

    人工智能概览 2023年5月25日
    00
  • 结构体类型数据作为函数参数(三种方法)

    结构体是C语言中一个非常有用的数据类型。如果使用得当,它可以大大简化代码的编写和管理。在C语言中,我们可以通过三种不同的方法将结构体类型数据作为函数参数传递给函数。 方法一:传递结构体变量的地址 方法一是将结构体变量的地址作为函数参数传递。这是最常见的做法,因为它既简单又直观。下面是示例代码: #include <stdio.h> struct …

    人工智能概览 2023年5月25日
    00
合作推广
合作推广
分享本页
返回顶部