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

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

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

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

方法一:

取阈值为 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 pltdef 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()

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

方法二:

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

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

import cv2def main():img = cv2.imread("1.TIF", 0)height, width = img.shape# 灰度值总和px_t = 0for 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()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/129013.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

制造行业数字化运维破局之道

项目背景 某大型汽车制造集团,致力于通过数字化、智能化运营手段为用户提升提供高品质的汽车产品和服务。IT部门不仅为内外部持续提供服务,同时为业务运营与核心系统运行提供重要支撑。数字化运维作为数字化转型的核心基础,不但要保障数据安…

3D网页游戏外包开发引擎

3D网页开发引擎是用于创建具有三维图形、虚拟现实和交互性的网页应用程序的工具。以下是一些常用的3D网页开发引擎以及它们的主要特点,希望对大家有所帮助。北京木奇移动技术有限公司,专业的软件外包开发公司,欢迎交流合作。 1.Three.js&…

使用 Curl 和 DomCrawler 下载抖音视频链接并存储到指定文件夹

项目需求 假设我们需要从抖音平台上下载一些特定的视频,以便进行分析、编辑或其他用途。为了实现这个目标,我们需要编写一个爬虫程序来获取抖音视频的链接,并将其保存到本地文件夹中。 目标分析 在开始编写爬虫之前,我们需要了…

Redis Twemproxy 集群,水平扩展 ,扩容方案

文章目录 一、概述二、Twemproxy 分布模式三、测试规划四、Redis 服务实例准备4.1 配置Redis实例4.2 创建关资源4.3 启动Redis服务实例 五、Twemproxy 安装准备六、Twemproxy 安装及集群配置6.1 安装 Twemproxy6.2 配置 Twemproxy6.3 启动 twemproxy6.4 测试 twemproxy 集群 如…

如何使用 NFTScan NFT API 在 Polygon 网络上开发 Web3 应用

Polygon 以前被称为 Matic Network,是一种扩展的解决方案,它提供多种工具来加快并降低区块链网络上交易的成本和复杂性。然而,其区块链上的大量活动使以太坊因增长的传输成本和拥挤的流量几乎瘫痪。Polygon 诞生的主要目的是帮助以太坊解决链…

Docker学习——①

文章目录 1、什么是虚拟化、容器化?2、为什么要虚拟化、容器化?3、虚拟化实现方式3.1 应用程序执行环境分层3.2 虚拟化常见类别3.3 常见虚拟化实现3.3.1 主机虚拟化(虚拟机)实现3.3.2 容器虚拟化实现3.3.3 空间隔离实战--基础知识3.3.4 PID 隔离3.3.5 Mo…

springboot+vue基于Hadoop短视频流量数据分析与可视化系统的设计与实现【内含源码+文档+部署教程】

博主介绍:✌全网粉丝10W,前互联网大厂软件研发、集结硕博英豪成立工作室。专注于计算机相关专业毕业设计项目实战6年之久,选择我们就是选择放心、选择安心毕业✌ 🍅由于篇幅限制,想要获取完整文章或者源码,或者代做&am…

HarmonyOS(二)—— 初识ArkTS开发语言(中)之ArkTS的由来和演进

前言 在上一篇文章HarmonyOS(二)—— 初识ArkTS开发语言(上)之TypeScript入门,我初识了TypeScript相关知识点,也知道ArkTS是华为基于TypeScript发展演化而来。 从最初的基础的逻辑交互能力,到…

C++类和对象万字详解(典藏版)

文章目录 前言认识类和对象使用 struct 定义类class 定义类类的声明和定义分离类大小的计算this指针this指针的常见的面试题 构造函数与构析函数构造函数初始化列表 构析函数默认生成的构造函数和构析函数 拷贝构造函数默认类型转化与 explicit 关键字 static 成员变量运算符重…

【云原生基础】了解云原生,什么是云原生?

📑前言 本文主要讲了云原生的基本概念和原则的文章,如果有什么需要改进的地方还请大佬指出⛺️ 🎬作者简介:大家好,我是青衿🥇 ☁️博客首页:CSDN主页放风讲故事 🌄每日一句&#x…

分享一个抖音视频解析神器~

怎么样下载抖音视频?相信很多人都有过这样的困惑。作为一个资深短视频剪辑工作者,常常需要用到各种视频素材,其中不乏需要从抖音上下载的,因此我也尝试过许多下载工具,但是效果都不大满意,直到有一次朋友给…

SpringBoot可以同时处理多少请求?

前言 前两天面试的时候,面试官问我:一个ip发请求过来,是一个ip对应一个线程吗?我突然愣住了,对于SpringBoot如何处理请求好像从来没仔细思考过,所以面试结束后就仔细研究了一番,现在就来探讨一…

C++——list

目录 list介绍 list的函数接口 构造函数 push_front和pop_front push_back和pop_back insert erase 迭代器 front和back size resize empty clear list::sort unique reverse 迭代器的实现 list介绍 list是一种可以在常数范围内在任意位置进行插入和删除的序列…

“AI换脸诈骗”来势汹汹,三个层面科学应对……

当前,AI技术的广泛应用为社会公众提供了个性化智能化的信息服务,也给网络诈骗带来可乘之机,如不法分子通过面部替换语音合成等方式制作虚假图像、音频、视频仿冒他人身份实施诈骗、侵害消费者合法权益。你认为AI诈骗到底应该如何防范&#xf…

Selenium3-获取元素的css属性

来个元素CSS值 代码1: 通过javaScript执行脚本获取css值 String jsStr "return document.getElementById(\"buyers\").style.getPropertyValue(width)"; Object o ((JavascriptExecutor) driver).executeScript(jsStr); System.out.println(o.toString(…

短视频平台Roposo入驻印尼,会成为下一个Tiktok吗

Roposo是一个印度本土的短视频平台,功能和风格都和Tiktok很相似。 早在2020年7月,印度下令封禁了多个app,其中就包括了TikTok。在那之前,TikTok已经在印度累计了约2亿的用户,基数已经非常的大,那么被封禁之…

北京君正X2600处理器亮相ELEXCON 2023,打造多核异构跨界新价值

伴随下游应用持续丰富,细节需求不断增多,标准化产品已越来越难以满足市场需求,芯片方案提供商需要不断深入行业,根据市场需求推出适配的产品。在这样的背景下,北京君正迅速推出X2600系列多核异构跨界处理器&#xff0c…

ONNX的结构与转换

ONNX的结构与转换 1. 背景2. ONNX结构分析与修改工具2.1. ONNX结构分析2.2. ONNX的兼容性问题2.3. 修改ONNX模型 3. 各大深度学习框架如何转换到ONNX?3.1. MXNet转换ONNX3.2. TensorFlow模型转ONNX3.3. PyTorch模型转ONNX3.4. PaddlePaddle模型转ONNX3.4.1. 简介3.4…

高阶数据结构学习——LRU Cache

文章目录 1、了解LRU Cache(Least Recently Used缩写)2、代码实现 1、了解LRU Cache(Least Recently Used缩写) Cache是缓存,在磁盘和内存之间,内存和寄存器之间都存在,CPU和内存之间存在三级缓…

基于PyTorch的中文情绪分析器设计与开发

收藏和点赞,您的关注是我创作的动力 文章目录 概要 一、相关基础理论2.1 主流深度学习框架2.2 神经网络2.2.1 神经网络基础 二、中文情感分类模型构建3.1 开发环境3.2 数据部分3.3 文本特征提取3.3.1、过滤标点符号3.3.2 中文分词、单词过滤 三 运行结果与分析五 结…