当前位置: 首页 > news >正文

python学opencv|读取图像(三十三)阈值处理图像-限定像素

【1】引言

前序我们已经掌握分解图像的通道,设置各个通道的RGB值,相关文章包括且不限于:

python学opencv|读取图像(十四)BGR图像和HSV图像通道拆分-CSDN博客

python学opencv|读取图像(十五)BGR图像和HSV图像通道合并_bgr hsv-CSDN博客

也学会了对于较为简单的灰度图像进行像素操作:

python学opencv|读取图像(六)读取图像像素RGB值_python 获取图片像素点颜色-CSDN博客

python学opencv|读取图像(九)用numpy创建黑白相间灰度图_numpy生成全黑图片-CSDN博客

python学opencv|读取图像(十)用numpy创建彩色图像_python numpy图像-CSDN博客

有时候,如果我们想粗犷一些处理像素,也就是把图像的像素约束在某一些范围内,也就是做阈值限定,这时候就要在先前的学习基础上,应用一个新的函数:cv2.threshold()。

【2】官网教程

点击下方连链接,直达官网教程:

OpenCV: Miscellaneous Image Transformations

在这里,将会看到对 cv2.threshold()函数的说明:

2877c7b426fc42808b445490aed09fca.png

图1

这里的参数意义为:

double cv::threshold     (     InputArray     src,  #输入图像
        OutputArray     dst,                                  #输出图像
        double     thresh,                                     #阈值下限-阈值开关
        double     maxval,                                   #阈值上限
        int     type )                                             #阈值处理类型,暂不是重点,无需关注

需要说明的是,一旦达到阈值下限,图像的RGB值会直接等于阈值上限;而未达到阈值下限时,图像的RGB值会直接等于0。

所以,这个阈值下限,本身孩子一个阈值开关,大于它的都取上限,小于它的都是0.

【3】代码测试

【3.1】代码

为了测试这个阈值的效果,我们做一下代码测试。

首先引入图像:

import cv2 as cv # 引入CV模块
import numpy as np #引入numpy模块# 读取图片
src = cv.imread('scasrcf.png',0)
dst=src#输出图像

这里直接把输入图像转化为灰度图像了。

然后是调用cv2.threshold()函数,尝试不同的阈值类型:

t1,dst1=cv.threshold(src,58,158,cv.THRESH_BINARY) #阈值开关58,阈值上限158
t2,dst2=cv.threshold(src,100,255,cv.THRESH_BINARY) #阈值开关100,阈值上限255
t3,dst3=cv.threshold(src,0,255,cv.THRESH_BINARY) #阈值开关0,阈值上限255

 之后就是对这些阈值函数进行效果输出和保存:

#展示图像
cv.imshow('srcf', dst)  # 在屏幕展示效果
cv.imshow('srcft1', dst1)  # 在屏幕展示效果
cv.imshow('srcft2', dst2)  # 在屏幕展示效果
cv.imshow('srcft3', dst3)  # 在屏幕展示效果#保存图像
cv.imwrite('srcf-m.png', dst)  # 保存图像
cv.imwrite('srcf-m-t1.png', dst1)  # 保存图像
cv.imwrite('srcf-m-t2.png', dst2)  # 保存图像
cv.imwrite('srcf-m-t3.png', dst3)  # 保存图像
cv.waitKey()  # 图像不会自动关闭
cv.destroyAllWindows()  # 释放所有窗口

【3.2】效果

为了分辨清楚图像效果,首先我们看原图:

e21a4f0fc353499ea7c5dfeff6c4f46b.png

图2 原图

读取图像后转化的灰度图为:

230a8e1be3db4cbc9d4914573957910a.png

图3 灰度图

然后是阈值开关58,阈值上限158的转换效果:

9e556d0b49134dcfafe52816576e65fd.png

图4  阈值开关58,阈值上限158

然后是阈值开关100,阈值上限255的转换效果:

a7abe9b3320d4eb28e27fed18919dd3e.png

图5 阈值开关100,阈值上限255

然后是阈值开关0,阈值上限255:

5234f84fa2e940e7b733b5017993d62b.png

图6 阈值开关0,阈值上限255

实际上,图6不是纯白色图片,因为还有一些RGB=0的位置,所以图6中有一些零零散散的黑色线条。

【4】细节说明

调用cv2.threshold()函数时,应该按照下述形式:

t1,dst1=cv.threshold(src,58,158,cv.THRESH_BINARY)

这里的t1不可少,可以暂时理解为:为了把各个未知的RGB值转换为0或者阈值上限,t1是一个中间过渡值。

【5】总结

掌握了python+opencv获得阈值处理图像,也就是限定像素图像的技巧。

 

相关文章:

python学opencv|读取图像(三十三)阈值处理图像-限定像素

【1】引言 前序我们已经掌握分解图像的通道,设置各个通道的RGB值,相关文章包括且不限于: python学opencv|读取图像(十四)BGR图像和HSV图像通道拆分-CSDN博客 python学opencv|读取图像(十五)B…...

QT Quick QML 实例之椭圆投影,旋转

文章目录 一、前言二、演示三、部分代码与分析 QML 其它文章请点击这里: QT QUICK QML 学习笔记 国际站点 GitHub: https://github.com/chenchuhan 国内站点 Gitee : https://gitee.com/chuck_chee 一、前言 此 Demo 主要用于无人机吊舱视角的模拟&#xf…...

炸砖块游戏的最终图案

描述 小红正在玩一个“炸砖块”游戏,游戏的规则如下:初始有一个 n * m 的砖块矩阵。小红会炸 k 次,每次会向一个位置投炸弹,如果这个位置有一个砖块,则砖块消失,上方的砖块向下落。小红希望你画出最终砖块的图案。 输入描述 第一行输入三个正整数 n, m, k,代表矩阵的行…...

LLM的实验平台有哪些:快速搭建测试大语言模型

LLM的实验平台有哪些:快速搭建测试大语言模型 目录 LLM的实验平台有哪些:快速搭建测试大语言模型低代码平台工程观测平台本地应用平台在线编程竞技场性能排名代码质量评估开源框架Hugging Face是一个机器学习和数据科学平台及社区主要功能开源工具与库应用场景优势低代码平台…...

python3GUI--大屏可视化-XX产业大数据指挥舱(附下载地址) By:PyQt5

文章目录 一.前言二.预览三.软件开发心得1.使用方法2.UI设计3.代码架构4.项目结构 四.代码片段分享1.图片平滑缩放组件2.滚动日志组件 五.心得体会 大小:35.0 M,软件安装包放在了这里! 本软件未…...

.NET 9.0 的 Blazor Web App 项目中 Hash 变换(MD5、Pbkdf2) 使用备忘

一、生成 string 对应的 MD5 码 /// <summary>/// 生成 string 对应的 MD5 码/// </summary>/// <param name"str">需要转换的字符串 string&#xff1a;用于登录认证时&#xff0c;str username 线下传递的key DateTime.Now.Ticks.ToString() …...

uniapp 抖音小程序 getUserProfile:fail must be invoked by user tap gesture

项目场景&#xff1a; uniapp 抖音小程序 getUserProfile:fail must be invoked by user tap gesture,在实现点击头像需要出发抖音小程序获取用户原生头像的操作中&#xff0c;无论如何也无法触发抖音的原生窗口&#xff01; 问题描述 这个问题我找了很多博主的方法&#xff…...

(undone) MIT6.S081 2023 学习笔记 (Day5: LAB4 traps)

LAB 网页&#xff1a;https://pdos.csail.mit.edu/6.S081/2023/labs/traps.html 任务1&#xff1a;RISC-V assembly (完成) 初步看问题要求&#xff0c;这是一道文科题(问答题) 在你的 xv6 仓库中有一个文件 user/call.c。执行 make fs.img 会对其进行编译&#xff0c;并生成…...

前端笔记----

在我的理解里边一切做页面的代码都是属于前端代码。 之前用过qt框架&#xff0c;也是用来写界面的&#xff0c;但是那是用来写客户端的&#xff0c;而html是用来写web浏览器的&#xff0c;相较之下htmlcssJavaScript写出来的界面是更加漂亮的。这里就记录我自个学习后的一些笔…...

学习华为熵减,激发组织活力

目录 为什么学习华为&#xff1f; 学习华为什么&#xff1f; 一、势&#xff1a;顺势而为&#xff0c;在风口上猪都会飞起来。 二、道&#xff1a;就是认识和利用规律层面&#xff0c;文化和制度创新就是企业经营之道。 三、法&#xff1a;就是一套价值管理的变革方法论。…...

9Hive数据倾斜

这里写目录标题 数据倾斜问题剖析数据倾斜解决方案1. 空值引发的数据倾斜2. 不同数据类型引发的数据倾斜3. 不可拆分大文件引发的数据倾斜4. 数据膨胀引发的数据倾斜5. 表连接时引发的数据倾斜6. 确实无法减少数据量引发的数据倾斜 总结 数据倾斜问题剖析 数据倾斜是分布式系统…...

【大数据】机器学习 -----关于data.csv数据集分析案例

打开表 import pandas as pd df2 pd.read_csv("data.csv",encoding"gbk") df2.head()查看数据属性&#xff08;列标题&#xff0c;表形状&#xff0c;类型&#xff0c;行标题&#xff0c;值&#xff09; print("列标题:",df2.columns)Data…...

深入解析 C++ 类型转换

简介 C 类型转换是开发者必须掌握的重要技能之一, 无论是处理隐式转换还是显式转换, 理解其背后的机制与用法至关重要. 本篇博客旨在从基础到高级全面解析 C 的类型转换, 包括实际开发中的应用场景和性能分析. 自动转换 隐式类型转换 编译器可以在无需明确指示的情况下, 将一…...

C++ union 联合(八股总结)

union&#xff08;联合体&#xff09;允许在同一内存位置上存储不同的数据类型&#xff0c;所有成员共享相同的内存空间。 内存布局 由于联合体的所有成员都共享同一块内存&#xff0c;因此联合体的大小是其最大成员的大小。联合体的实际大小取决于其最大成员的类型和对齐要求…...

聊聊AI Agent

什么是AI Agent&#xff1f; AI Agent指的是一种使用人工智能技术的自主实体&#xff0c;它能够感知环境、做出决策&#xff0c;并采取行动以实现特定目标。AI Agent的核心思想是它能够独立运作&#xff0c;基于输入信息做出有根据的决策&#xff0c;并通过学习算法不断提高自…...

scala代码打包配置(maven)

目录 mavenpom.xml打包配置项&#xff08;非完整版&#xff0c;仅含打包的内容< build>&#xff09;pom.xml完整示例&#xff08;需要修改参数&#xff09;效果说明 maven 最主要的方式还是maven进行打包&#xff0c;也好进行配置项的管理 以下为pom文件&#xff08;不要…...

慧集通(DataLinkX)iPaaS集成平台-业务建模之业务对象(二)

3.UI模板 当我们选择一条已经建好的业务对象点击功能按钮【UI模板】进入该业务对象的UI显示配置界面。 右边填写的是UI模板的编码以及对应名称&#xff1b;菜单界面配置以业务对象UI模板编码获取显示界面。 3.1【列表-按钮】 展示的对应业务对象界面的功能按钮配置&#xff1…...

C++使用minio-cpp库在minio中创建bucket

直接看代码 #include <iostream> #include <string>#include "miniocpp/client.h"int main() {minio::s3::BaseUrl baseUrl("base url");minio::creds::StaticProvider staticProvider("access key", "secret key");mini…...

【大模型】大语言模型的数据准备:构建高质量训练数据的关键指南

大语言模型的数据准备&#xff1a;构建高质量训练数据的关键指南 大语言模型&#xff08;LLM, Large Language Model&#xff09;的训练离不开高质量的数据&#xff0c;而数据准备是模型性能的基石。无论是预训练还是微调&#xff0c;数据的选择、清洗和标注都会直接影响模型的…...

【解决】okhttp的java.lang.IllegalStateException: closed错误

问题 Android 使用OKHttp进行后端通信&#xff0c;后端处理结果&#xff0c;反馈给前端的responseBody中其实有值&#xff0c;但是一直报异常&#xff0c;后来才发现主要是OkHttp请求回调中response.body().string()只能有效调用一次&#xff0c;而我使用了两次&#xff1a; 解…...

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇&#xff0c;在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下&#xff1a; 【Note】&#xff1a;如果你已经完成安装等操作&#xff0c;可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作&#xff0c;重…...

QMC5883L的驱动

简介 本篇文章的代码已经上传到了github上面&#xff0c;开源代码 作为一个电子罗盘模块&#xff0c;我们可以通过I2C从中获取偏航角yaw&#xff0c;相对于六轴陀螺仪的yaw&#xff0c;qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...

高等数学(下)题型笔记(八)空间解析几何与向量代数

目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...

ServerTrust 并非唯一

NSURLAuthenticationMethodServerTrust 只是 authenticationMethod 的冰山一角 要理解 NSURLAuthenticationMethodServerTrust, 首先要明白它只是 authenticationMethod 的选项之一, 并非唯一 1 先厘清概念 点说明authenticationMethodURLAuthenticationChallenge.protectionS…...

蓝桥杯3498 01串的熵

问题描述 对于一个长度为 23333333的 01 串, 如果其信息熵为 11625907.5798&#xff0c; 且 0 出现次数比 1 少, 那么这个 01 串中 0 出现了多少次? #include<iostream> #include<cmath> using namespace std;int n 23333333;int main() {//枚举 0 出现的次数//因…...

Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决

Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决 问题背景 在一个基于 Spring Cloud Gateway WebFlux 构建的微服务项目中&#xff0c;新增了一个本地验证码接口 /code&#xff0c;使用函数式路由&#xff08;RouterFunction&#xff09;和 Hutool 的 Circle…...

Fabric V2.5 通用溯源系统——增加图片上传与下载功能

fabric-trace项目在发布一年后,部署量已突破1000次,为支持更多场景,现新增支持图片信息上链,本文对图片上传、下载功能代码进行梳理,包含智能合约、后端、前端部分。 一、智能合约修改 为了增加图片信息上链溯源,需要对底层数据结构进行修改,在此对智能合约中的农产品数…...

作为测试我们应该关注redis哪些方面

1、功能测试 数据结构操作&#xff1a;验证字符串、列表、哈希、集合和有序的基本操作是否正确 持久化&#xff1a;测试aof和aof持久化机制&#xff0c;确保数据在开启后正确恢复。 事务&#xff1a;检查事务的原子性和回滚机制。 发布订阅&#xff1a;确保消息正确传递。 2、性…...

【堆垛策略】设计方法

堆垛策略的设计是积木堆叠系统的核心&#xff0c;直接影响堆叠的稳定性、效率和容错能力。以下是分层次的堆垛策略设计方法&#xff0c;涵盖基础规则、优化算法和容错机制&#xff1a; 1. 基础堆垛规则 (1) 物理稳定性优先 重心原则&#xff1a; 大尺寸/重量积木在下&#xf…...

Kubernetes 节点自动伸缩(Cluster Autoscaler)原理与实践

在 Kubernetes 集群中&#xff0c;如何在保障应用高可用的同时有效地管理资源&#xff0c;一直是运维人员和开发者关注的重点。随着微服务架构的普及&#xff0c;集群内各个服务的负载波动日趋明显&#xff0c;传统的手动扩缩容方式已无法满足实时性和弹性需求。 Cluster Auto…...