python学opencv|读取图像(三十四)阈值处理-彩色图像

【1】引言

前序已经掌握了使用阈值处理函数控制灰度图的RGB值,相关链接为:

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

在更早的学习中,灰度图的RGB只有一个通道,也就是各个像素点对应的BGR值都只用一个数表达。

但是彩色图像各个像素点的BGR值是三个通道,需要三个数来表达。那此时阈值函数是否还有作用,今天就来一起探讨一下。

【2】灰度图像定点像素BGR

此处使用的原图是:

图1

然后把图像读入,直接转化为灰度:

import cv2 as cv # 引入CV模块
import numpy as np #引入numpy模块

# 读取图片
src = cv.imread('scasrcf.png',0)
dst=src#输出图像

这里的dst是原始的灰度图像,用来和后面阈值函数处理过的图像进行对比。

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)  # 在屏幕展示效果
print("dst像素数为[100,100]位置处的BGR=", dst[100, 100])  # 获取像素数为[100,100]位置处的BGR
print("dst1像素数为[100,100]位置处的BGR=", dst1[100, 100])  # 获取像素数为[100,100]位置处的BGR
print("dst2像素数为[100,100]位置处的BGR=", dst2[100, 100])  # 获取像素数为[100,100]位置处的BGR
print("dst3像素数为[100,100]位置处的BGR=", dst3[100, 100])  # 获取像素数为[100,100]位置处的BGR

为了单独显示像素点为[100,100]的RGB值,使用print()函数将其直接输出了,这里输出了四个不同图像在像素点为[100,100]的RGB值。

然后是保存图像:

#保存图像
cv.imwrite('srcf-m-c.png', dst)  # 保存图像
cv.imwrite('srcf-m-t1-c.png', dst1)  # 保存图像
cv.imwrite('srcf-m-t2-c.png', dst2)  # 保存图像
cv.imwrite('srcf-m-t3-c.png', dst3)  # 保存图像
cv.waitKey()  # 图像不会自动关闭
cv.destroyAllWindows()  # 释放所有窗口

运行代码后,获得的图像和python学opencv|读取图像(三十三)阈值处理图像-限定像素-CSDN博客完全一致,同时新增了像素点的RGB值输出:

图2 灰度图RGB值读取

追溯dst1、dst2和dst3的阈值开关:

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

在像素点[100,100],原本的灰度图RGB=189,大于任何一个阈值开关,所以这个像素点的RGB值全部强制等于255。

测试的完整代码为:

import cv2 as cv # 引入CV模块
import numpy as np #引入numpy模块

# 读取图片
src = cv.imread('scasrcf.png',0)
dst=src#输出图像


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)  # 在屏幕展示效果
print("dst像素数为[100,100]位置处的BGR=", dst[100, 100])  # 获取像素数为[100,100]位置处的BGR
print("dst1像素数为[100,100]位置处的BGR=", dst1[100, 100])  # 获取像素数为[100,100]位置处的BGR
print("dst2像素数为[100,100]位置处的BGR=", dst2[100, 100])  # 获取像素数为[100,100]位置处的BGR
print("dst3像素数为[100,100]位置处的BGR=", dst3[100, 100])  # 获取像素数为[100,100]位置处的BGR

#保存图像
cv.imwrite('srcf-m-c.png', dst)  # 保存图像
cv.imwrite('srcf-m-t1-c.png', dst1)  # 保存图像
cv.imwrite('srcf-m-t2-c.png', dst2)  # 保存图像
cv.imwrite('srcf-m-t3-c.png', dst3)  # 保存图像
cv.waitKey()  # 图像不会自动关闭
cv.destroyAllWindows()  # 释放所有窗口

【3】彩色图像阈值函数测试

要想调用彩色图像,最简单的办法就是读入图像的时候,不要设置为灰度图,只需要修改一行代码:

src = cv.imread('scasrcf.png',0)  #,0删除就能获得彩色图像

在此基础上,代码生成效率大幅增加,此时的完整代码为:

import cv2 as cv # 引入CV模块
import numpy as np #引入numpy模块

# 读取图片
src = cv.imread('scasrcf.png')
dst=src#输出图像


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)  # 在屏幕展示效果
print("dst像素数为[100,100]位置处的BGR=", dst[100, 100])  # 获取像素数为[100,100]位置处的BGR
print("dst1像素数为[100,100]位置处的BGR=", dst1[100, 100])  # 获取像素数为[100,100]位置处的BGR
print("dst2像素数为[100,100]位置处的BGR=", dst2[100, 100])  # 获取像素数为[100,100]位置处的BGR
print("dst3像素数为[100,100]位置处的BGR=", dst3[100, 100])  # 获取像素数为[100,100]位置处的BGR

#保存图像
cv.imwrite('srcf-m-c.png', dst)  # 保存图像
cv.imwrite('srcf-m-t1-c.png', dst1)  # 保存图像
cv.imwrite('srcf-m-t2-c.png', dst2)  # 保存图像
cv.imwrite('srcf-m-t3-c.png', dst3)  # 保存图像
cv.waitKey()  # 图像不会自动关闭
cv.destroyAllWindows()  # 释放所有窗口

继续使用图1做原图,此时经过阈值函数处理,获得的图像分别为:

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

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

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

相应的,也输出了像素点[100,100]处的BGR值:

图6  彩色图RGB值读取

为了更好理解,先把阈值开关复制过来:

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

对于原图B=69,大于dst1和dst3的阈值开关,所以会直接将B通道值设定为最大阈值255,然后在dst2图像里强制设为0;对于原图的GR通道,同时大于dst1、dst2和dst3的阈值开关,所以会直接将GR通道值设定为最大阈值255。

【4】细节说明

阈值处理函数cv2.threshold()对灰度图和彩色图都有效果,本身不改变像素值,只改变各个像素点对应的RGB值。

【5】总结

掌握了python+opencv设置彩色图像各个像素点RGB阈值的技巧

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

jmeter事务控制器-勾选Generate Parent Sample

1、打开jmeter工具,添加线程组,添加逻辑控制器-事务控制器 2、在事务控制器,勾选Generate parent sample:生成父样本;说明勾选后,事务控制器会作为父节点,其下面的请求作为子节点 3、执行&#…

C++ ——— 学习并使用 string 类

目录 学习 string 类 使用 string 类 实例化一个无参数的 string 对象 实例化一个带参数的 string 对象 合并两个字符串(重载了加运算符) 通过重载[]访问每个字符 迭代器遍历每个字符 范围 for 遍历每个字符 学习 string 类 何为 string 类&…

拟合算法 (matlab工具箱)

拟合算法: 1线性最小二乘法拟合 使用matlab进行求解 拟合优度:R^2 拟合优度的matlab代码: 2,Matlab工具箱的教学 一些函数: 拟合算法: 插值算法中,得到的多项式f(x)要经过所有样本点。但是如果样本点太多&#…

实力认证 | 海云安入选《信创安全产品及服务购买决策参考》

近日,国内知名安全调研机构GoUpSec发布了2024年中国网络安全行业《信创安全产品及服务购买决策参考》,报告从产品特点、产品优势、成功案例、安全策略等维度对各厂商信创安全产品及服务进行调研了解。 海云安凭借AI大模型技术在信创安全领域中的创新应用…

闲谭SpringBoot--ShardingSphere分布式事务探究

文章目录 0. 背景1. 未分库分表时2. 仅分表时3. 分库分表时3.1 不涉及分库表3.2 涉及分库表,且分库表处于一个库3.3 涉及分库表,且分库表处于多个库3.4 涉及分库表,且运行中某库停机 4. 小结 0. 背景 接上篇文章《闲谭SpringBoot–ShardingS…

【Azure 架构师学习笔记】- Azure Function (2) --实操1

本文属于【Azure 架构师学习笔记】系列。 本文属于【Azure Function 】系列。 接上文【Azure 架构师学习笔记】- Azure Function (1) --环境搭建和背景介绍 前言 上一文介绍了环境搭建,接下来就在本地环境下使用一下。 环境准备 这里我下载了最新的VS studio&…

【Vue3 入门到实战】3. ref 和 reactive区别和适用场景

目录 ​编辑 1. ref 部分 1.1 ref定义基本数据类型 1.2 ref 定义引用数据类型 2. reactive 函数 3. ref 和 reactive 对比 3.1 原理 3.2 区别 3.3 使用原则 在 Vue 3 中 ref 和 reactive 是用于创建响应式数据的两个核心函数。它们都属于 Composition API 的一部分&…

k8s集群换IP

k8s集群搭建及节点加入时需要确定IP,但安装完成后设备移动到新环境可能出现网段更换或者IP被占用的情况,导致无法ping通节点或者无法打开原IP的服务。 解决方法为保持原有IP不更换,给网卡再加一个IP 这边使用两个ubuntu虚拟机模拟服务器和w…

学习threejs,使用FlyControls相机控制器

👨‍⚕️ 主页: gis分享者 👨‍⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍⚕️ 收录于专栏:threejs gis工程师 文章目录 一、🍀前言1.1 ☘️THREE.FlyControls 相机控制…

奉加微PHY6230兼容性:部分手机不兼容

从事嵌入式单片机的工作算是符合我个人兴趣爱好的,当面对一个新的芯片我即想把芯片尽快搞懂完成项目赚钱,也想着能够把自己遇到的坑和注意事项记录下来,即方便自己后面查阅也可以分享给大家,这是一种冲动,但是这个或许并不是原厂希望的,尽管这样有可能会牺牲一些时间也有哪天原…

Unity3D仿星露谷物语开发23之拿起道具的动画

1、目标 当点击库存栏上可以carry的道具时,首先arms替换为carry状态,同时手上拿着被点击的道具。当再次点击同一个道具时,ams替换为idle状态,手上放下之前的道具。 这个最主要的是要学会使用AnimatorOverrideController类。 2、…

【Unity3D】远处的物体会闪烁问题(深度冲突) Reversed-Z

知识点:深度冲突、像素闪烁现象、Reversed-Z(反向Z)、浮点数精度问题 前提概要:深度值都是由32位浮点数存储 原因:深度冲突,多个物体之间无法正确地渲染远近关系,出现上一帧可能是A物体在B物体…

彻底理解JVM类加载机制

文章目录 一、类加载器和双亲委派机制1.1、类加载器1.2、双亲委派机制1.3、自定义类加载器1.4、打破双亲委派机制 二、类的加载 图片来源:图灵学院   由上图可知,创建对象,执行其中的方法,在java层面,最重要的有获取…

【2024年华为OD机试】 (A卷,200分)- 快递投放问题(Java JS PythonC/C++)

一、问题描述 题目解析 题目描述 有 N 个快递站点用字符串标识,某些站点之间有道路连接。每个站点有一些包裹要运输,每个站点间的包裹不重复。路上有检查站会导致部分货物无法通行,计算哪些货物无法正常投递。 输入描述 第一行输入 M N&…

python爬虫爬取淘宝商品比价||淘宝商品详情API接口

最近在学习北京理工大学的爬虫课程,其中一个实例是讲如何爬取淘宝商品信息,现整理如下: 功能描述:获取淘宝搜索页面的信息,提取其中的商品名称和价格 探讨:淘宝的搜索接口 翻页的处理 技术路线:requests…

【大数据】机器学习------支持向量机(SVM)

支持向量机的基本概念和数学公式: 1. 线性可分的支持向量机 对于线性可分的数据集 ,其中(x_i \in R^d) 是特征向量 是类别标签,目标是找到一个超平面 ,使得对于所有 的样本 ,对于所有(y_i -1) 的样本,…

服务器数据恢复—EMC存储POOL中数据卷被删除的数据恢复案例

服务器数据恢复环境&故障: EMC Unity 400存储连接了2台硬盘柜。2台硬盘柜上一共有21块硬盘(520字节)。21块盘组建了2组RAID6:一组有11块硬盘,一组有10块硬盘。 在存储运行过程中,管理员误操作删除了 2组…

Ubuntu系统备份与还原

Ubuntu系统备份与还原 前言ClonezillaTimeshift安装图形界面使用命令行使用 前言 Linux系统备份软件有Clonezilla和TimeShift。 使用Clonezilla需要准备USB启动盘,而Timeshift不需要。 因此推荐使用Timeshift进行备份与还原。 Clonezilla 官网:https:…

CSS:语法、样式表、选择器

目录 一、语法 二、创建 外部样式表 内部样式表 内联样式 三、选择器 ID选择器 类选择器 伪类选择器 :hover a:link a:active a:visited 属性选择器 伪元素选择器 ::first-letter ::first-line ::selection ::placeholder ::before 和::after 通配选择器 标…

记录一次 centos 启动失败

文章目录 现场1分析1现场2分析2搜索实际解决过程 现场1 一次断电,导致 之前能正常启动的centos 7.7 起不来了有部分log , 关键信息如下 [1.332724] XFS(sda3): Internal error xfs ... at line xxx of fs/xfs/xfs_trans.c [1.332724] XFS(sda3): Corruption of in-memory data…