我的编程空间,编程开发者的网络收藏夹
学习永远不晚

python3 opencv图像二值化的问题怎么解决

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

python3 opencv图像二值化的问题怎么解决

这篇“python3 opencv图像二值化的问题怎么解决”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“python3 opencv图像二值化的问题怎么解决”文章吧。

如下图

python3 opencv图像二值化的问题怎么解决

可以看到左边部分因为整体偏暗,导致二值化后变成全黑,丢失了所有细节,这显然不是我们想要的结果。

原因threshold函数使用一个阈值对图像进行二值化,导致小于这个阈值的像素点全都变成0。因此使用一个阈值的二值化方法并不适用于上面的这张图。那怎么搞?

很明显,上面这张图只有左右两个区域明显亮度不同,最简单的方法就是把图分成两个区域,每个区域分别进行二值化,也就是说二值化上面这张图需要两个不同的阈值。那如果亮度不同的地方有三个,四个或者更多呢?那就每个区域用一个阈值来进行二值化。按照这个思想,因此有了cv2.adaptiveThreshold函数。

先看一下adaptiveThreshold二值化的使用效果。

python3 opencv图像二值化的问题怎么解决

明显还是有效果的,至少左边部分不是全黑。

接下来简单说一下adaptiveThreshold方法

cv2.adaptiveThreshold(class="lazy" data-src, maxValue, adaptiveMethod, thresholdType, blockSize, C, dst=None)

这个函数大致意思就是把图片每个像素点作为中心取N*N的区域,然后计算这个区域的阈值,来决定这个像素点变0还是变255

class="lazy" data-src:需要进行二值化的一张灰度图像

maxValue:满足条件的像素点需要设置的灰度值。(将要设置的灰度值)

adaptiveMethod:自适应阈值算法。可选ADAPTIVE_THRESH_MEAN_C 或 ADAPTIVE_THRESH_GAUSSIAN_C

thresholdType:opencv提供的二值化方法,只能THRESH_BINARY或者THRESH_BINARY_INV

blockSize:要分成的区域大小,上面的N值,一般取奇数

C:常数,每个区域计算出的阈值的基础上在减去这个常数作为这个区域的最终阈值,可以为负数

dst:输出图像,可以忽略

前两个参数与threshold的class="lazy" data-src和maxval一样相同

第三个参数adaptiveMethod

提供两种不同的计算阈值的方法,按照网上其他大佬的解释

ADAPTIVE_THRESH_MEAN_C,为局部邻域块的平均值,该算法是先求出块中的均值。

ADAPTIVE_THRESH_GAUSSIAN_C,为局部邻域块的高斯加权和。该算法是在区域中(x, y)周围的像素根据高斯函数按照他们离中心点的距离进行加权计算。

 第四个参数thresholdType

只能THRESH_BINARY或者THRESH_BINARY_INV

第5个参数blockSize

上述算法计算邻域时的领邻域大小,一般选择为3、5、7......等

第6个参数C

每个邻域计算出阈值后再减去C作为最终阈值

演示一下blockSize和C对二值化结果的影响,以THRESH_BINARY,ADAPTIVE_THRESH_GAUSSIAN_C为例

python3 opencv图像二值化的问题怎么解决

python3 opencv图像二值化的问题怎么解决

python3 opencv图像二值化的问题怎么解决

python3 opencv图像二值化的问题怎么解决

python3 opencv图像二值化的问题怎么解决

python3 opencv图像二值化的问题怎么解决

python3 opencv图像二值化的问题怎么解决

可以看到,当blockSize越大,参与计算阈值的区域也越大,细节轮廓就变得越少,整体轮廓越粗越明显

当C越大,每个像素点的N*N邻域计算出的阈值就越小,中心点大于这个阈值的可能性也就越大,设置成255的概率就越大,整体图像白色像素就越多,反之亦然。

这种二值化有点类似canny边缘检测,用来找轮廓或者特征点也挺不错。

import cv2import numpy as np blocksize = 3C=0def adaptive_demo(gray, blocksize, C):    binary = cv2.adaptiveThreshold(gray, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, blocksize, C)    # binary = cv2.GaussianBlur(binary, (15,15), 0)    cv2.imshow('binary', binary)def C_changed(value):    global gray    global blocksize    global C    C = value - 30    print('C:', C)    adaptive_demo(gray, blocksize, C)def blocksize_changed(value):    blocksize = 2 * value + 1    print('blocksize:', blocksize)if __name__ == "__main__":    image_path = './img/1.jpg'    img = cv2.imread(image_path)    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)    adaptive_demo(gray, 3, 0)    cv2.createTrackbar('C', 'binary',0, 60, C_changed)    cv2.createTrackbar('blocksize', 'binary',1, 20, blocksize_changed)    cv2.waitKey(0)

以上就是关于“python3 opencv图像二值化的问题怎么解决”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注编程网行业资讯频道。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

python3 opencv图像二值化的问题怎么解决

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

python3 opencv图像二值化的问题怎么解决

这篇“python3 opencv图像二值化的问题怎么解决”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“python3 op
2023-06-29

OpenCV图像的二值化怎么实现

这篇“OpenCV图像的二值化怎么实现”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“OpenCV图像的二值化怎么实现”文章吧
2023-07-05

Python+OpenCV怎么解决彩色图亮度不均衡问题

这篇文章主要介绍“Python+OpenCV怎么解决彩色图亮度不均衡问题”,在日常操作中,相信很多人在Python+OpenCV怎么解决彩色图亮度不均衡问题问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Pyt
2023-06-22

PyCharm调用matplotlib绘图时图像弹出问题怎么解决

今天小编给大家分享一下PyCharm调用matplotlib绘图时图像弹出问题怎么解决的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解
2023-07-02

vue二进制转图片显示问题怎么解决

这篇文章主要介绍“vue二进制转图片显示问题怎么解决”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“vue二进制转图片显示问题怎么解决”文章能帮助大家解决问题。二进制转图片显示 后端返回的是byte[
2023-06-30

pip安装opencv-python遇到的问题怎么解决

今天小编给大家分享一下pip安装opencv-python遇到的问题怎么解决的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。p
2023-07-05

OpenCV读取视频报错的问题怎么解决

这篇文章的内容主要围绕OpenCV读取视频报错的问题怎么解决进行讲述,文章内容清晰易懂,条理清晰,非常适合新手学习,值得大家去阅读。感兴趣的朋友可以跟随小编一起阅读吧。希望大家通过这篇文章有所收获!最近由于项目的需要,经常需要使用openc
2023-06-26

word当前无法显示此图像问题怎么解决

出现"Word当前无法显示此图像"问题时,可以尝试以下解决方法:1. 检查图像文件的格式:确认图像文件的格式是否被Word支持。常见的图像格式包括JPEG、PNG、GIF等,确保图像文件的格式与Word兼容。2. 重新插入图像:尝试删除当前
2023-09-08

vue中的传值及赋值问题怎么解决

这篇文章主要介绍“vue中的传值及赋值问题怎么解决”,在日常操作中,相信很多人在vue中的传值及赋值问题怎么解决问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”vue中的传值及赋值问题怎么解决”的疑惑有所帮助!
2023-06-30

使用python怎么解决OpenCV在读取显示图片闪退的问题

使用python怎么解决OpenCV在读取显示图片闪退的问题?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。waitKey函数:用来等待按键,当用户按下按键后,该
2023-06-06

python一维和二维列表的初始化问题怎么解决

这篇文章主要介绍“python一维和二维列表的初始化问题怎么解决”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“python一维和二维列表的初始化问题怎么解决”文章能帮助大家解决问题。一维列表的初始化
2023-07-02

vue组件值变化但不刷新问题怎么解决

本篇内容介绍了“vue组件值变化但不刷新问题怎么解决”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!组件值变化但不刷新强制组件刷新在调用组件的
2023-07-02

怎么解决php cookie取不到值的问题

这篇文章给大家分享的是有关怎么解决php cookie取不到值的问题的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。php cookie取不到值的解决办法:1、设置“setcookie(a,value)”;2、执行
2023-06-15

怎么解决php curl没有返回值的问题

本篇内容介绍了“怎么解决php curl没有返回值的问题”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!php curl没有返回值的解决办法:
2023-06-22

redis批量删除key值的问题怎么解决

这篇文章主要讲解了“redis批量删除key值的问题怎么解决”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“redis批量删除key值的问题怎么解决”吧!遇到的问题:在开发过程中,会遇到要批量
2023-06-29

c语言的连续赋值问题怎么解决

C语言的连续赋值问题是指在一条语句中连续赋值多个变量时可能会出现的问题。例如:int a, b;a = b = 10;在这个例子中,b的值会被赋为10,然后再将b的值赋给a。这样的连续赋值可能会导致意外的结果。要解决这个问题,可以使
2023-10-27

Vista摄像头无法打开的问题怎么解决

本篇内容介绍了“Vista摄像头无法打开的问题怎么解决”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!具体方法:     1.在Windows
2023-06-14

BeanUtils.copyProperties()所有的空值不复制问题怎么解决

本文小编为大家详细介绍“BeanUtils.copyProperties()所有的空值不复制问题怎么解决”,内容详细,步骤清晰,细节处理妥当,希望这篇“BeanUtils.copyProperties()所有的空值不复制问题怎么解决”文章能
2023-07-02

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录