opencv 灰度实验

opencv 灰度实验

  • 1. 最大值法
  • 2. 平均值法
  • 3. 加权均值法
  • 4(直接读取灰度图)cv2.IMREAD_GRAYSCALE
  • 5内置将原图转换为灰度图cv2.cvtColor()
  • 6 两个极端的灰度值

灰度图与彩色图最大的不同就是:彩色图是由R、G、B三个通道组成,而灰度图只有一个通道,也称为单通道图像,所以彩色图转成灰度图的过程本质上就是将R、G、B三通道合并成一个通道的过程。

1. 最大值法

对于彩色图像的每个像素,它会从R、G、B三个通道的值中选出最大的一个,并将其作为灰度图像中对应位置的像素值。
在这里插入图片描述
代码如下:

 '''灰度处理——最大值法'''#读取图像img=cv2.imread(r'./src/1.jpg')#取出图像的高度,宽度和BGR(颜色)h,w,c=img.shapeimg_gray=np.zeros((h,w),dtype=np.uint8) #构造出和原图形状相同的灰度图# 遍历原图像的每个元素for row in range(h):for col in range(w):# 取出原图形中的BGRb,g,r=img[row,col]# 将bgr的最大值赋值给灰度图max_value=max(b,g,r)img_gray[row,col]=max_value# 显示原图和灰度图cv2.imshow("img",img)cv2.imshow("img_gray",img_gray)cv2.waitKey(0)

在这里插入图片描述

步骤:

  • 1.读取原图像
  • 2.获取原图像的高度,宽度,和BGR(颜色)
  • 3.根据原图的高度和宽度构建出一个和原图形状相同的二维数组,类型dtype=np.uint8
  • 4.遍历原图像的每个像素点得到每个像素点的BRG
  • 5.将每个像素点的BRG进行大小比较找出最大值
  • 6.再把这个最大值赋值个与原图同一个高度和宽度的灰度图
  • 7最后将两个图片显示出来

2. 平均值法

对于彩色图像的每个像素,它会将R、G、B三个通道的像素值全部加起来,然后再除以三,得到的平均值就是灰度图像中对应位置的像素值。
在这里插入图片描述

代码如下:

'''灰度处理——均值法'''img=cv2.imread(r"./src/1.jpg")h,w,c=img.shapeimg_gray=np.zeros((h,w),dtype=np.uint8)for row in range(h):for col in range(w):b,g,r=img[row,col]mean_value=(b+g+r)//3img_gray[row,col]=mean_valuecv2.imshow("img",img)cv2.imshow("img_gray",img_gray)cv2.waitKey(0)

在这里插入图片描述
步骤跟最大值法一样

3. 加权均值法

对于彩色图像的每个像素,它会按照一定的权重去乘以每个通道的像素值,并将其相加,得到最后的值就是灰度图像中对应位置的像素值。本实验中,权重的比例为: R乘以0.299,G乘以0.587,B乘以0.114,这是经过大量实验得到的一个权重比例,也是一个比较常用的权重比例。
在这里插入图片描述
代码如下:

 '''灰度处理——加权均值法'''img=cv2.imread(r"./src/1.jpg")h,w,c=img.shapeimg_gray=np.zeros((h,w),dtype=np.uint8)for row in range(h):for col in range(w):b,g,r=img[row,col]mean_value=(b*0.229+g*0.599+r*0.144)img_gray[row,col]=mean_valuecv2.imshow("img",img)cv2.imshow("img_gray",img_gray)cv2.waitKey(0)

在这里插入图片描述

4(直接读取灰度图)cv2.IMREAD_GRAYSCALE

代码如下:

'''灰度处理——内置属性直接读取灰度图'''img_gray=cv2.imread(r'./src/1.jpg',cv2.IMREAD_GRAYSCALE)cv2.imshow("img_gray",img_gray)cv2.waitKey(0)

在这里插入图片描述

5内置将原图转换为灰度图cv2.cvtColor()

cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
代码如下:

'''灰度处理——内置将原图转换为灰度图'''img=cv2.imread(r"./src/1.jpg")img_gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)cv2.imshow("img",img)cv2.imshow("img_gray",img_gray)cv2.waitKey(0)

在这里插入图片描述

6 两个极端的灰度值

在这里插入图片描述

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

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

相关文章

『Kubernetes(K8S) 入门进阶实战』实战入门 - Pod 详解

『Kubernetes(K8S) 入门进阶实战』实战入门 - Pod 详解 Pod 结构 每个 Pod 中都可以包含一个或者多个容器,这些容器可以分为两类 用户程序所在的容器,数量可多可少Pause 容器,这是每个 Pod 都会有的一个根容器,它的作用有两个 可…

用 Vue 3 实现一个拖拽排序表格组件(支持列/行重排、列宽调整)

文章目录 一、项目初始化1.1 技术栈说明1.2 项目结构图(Mermaid) 二、构建基础表格组件2.1 创建基本表格结构 三、实现行拖拽排序3.1 安装依赖3.2 使用 vuedraggable 实现拖拽 四、实现列宽拖拽调整4.1 基本样式设置4.2 添加拖拽逻辑 五、实现列拖拽排序…

Python异常处理全面指南

目录 一、异常处理概述 1.1 什么是异常? 1.2 常见异常类型示例 二、基础异常捕获 2.1 简单异常捕获语法 2.2 特定异常类型捕获 三、高级异常处理技术 3.1 完整异常处理语法 3.2 异常传递机制 四、主动抛出异常 4.1 自定义异常抛出 4.2 创建自定义异常类 …

基于混沌映射的LDPC信道编译码matlab性能仿真,对比LDPC

目录 1.算法仿真效果 2.算法涉及理论知识概要 2.1 混沌映射 2.2 基于混沌映射的LDPC编译码 3.MATLAB核心程序 4.完整算法代码文件获得 1.算法仿真效果 matlab2022a仿真结果如下(完整代码运行后无水印): 仿真操作步骤可参考程序配套的操…

学点概率论,打破认识误区

概率论是统计分析和机器学习的核心。掌握概率论对于理解和开发稳健的模型至关重要,因为数据科学家需要掌握概率论。本博客将带您了解概率论中的关键概念,从集合论的基础知识到高级贝叶斯推理,并提供详细的解释和实际示例。 目录 简介 基本集合…

【数据结构_9】栈和队列

队列 Queue 一个方向进,一个方向出 Queue队列提供的核心方法: 入队列:offer add 出队列:poll remove 取队首元素: peek element 前面一列发生错误是返回null 后面一列发生错误时抛出异常 Queue是否能够使用isEm…

HarmontOS-ArkUI V2状态 !!语法糖 双向绑定

什么是双向绑定 双向绑定指的是在组件间数据的双向绑定。当一个值无论是在父组件还是子组件中改动都会在这两层中都更新界面。 回顾过往的“双向绑定”实现方式 靠@Event装饰回调函数 一般是对于@Param修饰的状态变量。当子组件发生某个动作的时候,调用某个父组件传递过来的…

贪心算法day9(合并区间)

1.合并区间 56. 合并区间 - 力扣(LeetCode) 对于这种区间问题,我们应该先排序根据排序的结果总结一些规律,进而的得出解决该问题的策略。 class Solution {public static int[][] merge(int[][] intervals) {//第一步进行左端点…

探索加密期权波动率交易的系统化实践——动态对冲工具使用

Trading Volatility – What Are My Options? 在本文中,我们将介绍一些如何交易资产波动性(而非资产价格)的示例。为了帮助理解,我们将使用 Deribit 上提供的几种不同产品,包括但不限于期权。我们将尽可能消除对标的价…

子函数嵌套的意义——以“颜色排序”为例(Python)

多一层缩进精减参数传递,参数少平铺书代码写更佳。 笔记模板由python脚本于2025-04-16 11:52:53创建,本篇笔记适合喜欢子函数嵌套结构代码形式的coder翻阅。 【学习的细节是欢悦的历程】 博客的核心价值:在于输出思考与经验,而不仅…

【数据结构与算法】LeetCode每日一题

此题跟27.移除数组中的指定值 类似,都是移除且双指针玩法,只不过判断条件发生了变化 此题跟26.删除有序数组中的重复项I 一样,除了fast-1变成了fast-2

c#OleDb连接池管理功能

使用 ConcurrentDictionary 和 ConcurrentBag 来管理数据库连接 using Drv.Utilities; using System; using System.Collections.Concurrent; using System.Collections.Generic; using System.Data.OleDb; using System.Linq;namespace Drv.AccessClient {/// <summary>…

【Flink运行时架构】核心组件

在Flink的运行架构中&#xff0c;有两大比较重要的组件&#xff1a;作业管理器&#xff08;JobManager&#xff09;和任务管理器&#xff08;TaskManager&#xff09;。 Flink的作业提交与任务处理时的系统如下图所示。 其中&#xff0c;客户端并不是处理系统的一部分&#xff…

牟乃夏《ArcGIS Engine地理信息系统开发教程》学习笔记2

目录 一、ArcGIS Engine概述 1、 定义 2、 核心功能 3、 与ArcObjects&#xff08;AO&#xff09;的关系 二、开发环境搭建 1、 开发工具要求 2、 关键步骤 三、 ArcGIS Engine核心组件 1、 对象模型 2、 类库分类 四、 第一个AE应用程序&#xff08;C#示例&#xf…

端、管、云一体化原生安全架构 告别外挂式防护!

面对数字化转型浪潮&#xff0c;企业网络安全风险日益凸显。数据泄露、黑客勒索等事件频发&#xff0c;合规要求加速推进。尽管企业纷纷部署了防病毒、身份认证、文件加密、入侵防护、流量监控等多种安全系统&#xff0c;但分散且孤立的架构非但没有有效抵御风险&#xff0c;反…

深度学习--深度学习概念、框架以及构造

文章目录 一、深度学习1.什么是深度学习&#xff1f;2.特点3.神经网络构造1&#xff09;.单层神经元2&#xff09;多层神经网络3&#xff09;小结 4.感知器5.多层感知器6.多层感知器&#xff08;偏置节点&#xff09;7.神经网络构造 一、深度学习 1.什么是深度学习&#xff1f…

helm账号密码加密

1、安装工具 sudo apt update sudo apt install gnupg -y wget https://github.com/getsops/sops/releases/download/v3.10.2/sops-v3.10.2.linux.amd64 mv sops-v3.10.2.linux.amd64 /usr/local/bin/sops chmod x /usr/local/bin/sops2、生成加密文件 gpg --full-generate-…

大数据面试问答-HBase/ClickHouse

1. HBase 1.1 概念 HBase是构建在Hadoop HDFS之上的分布式NoSQL数据库&#xff0c;采用列式存储模型&#xff0c;支持海量数据的实时读写和随机访问。适用于高吞吐、低延迟的场景&#xff0c;如实时日志处理、在线交易等。 RowKey&#xff08;行键&#xff09; 定义&#xf…

动态渲染组件

React框架&#xff0c;JSX语法 今天遇到一个好玩的 常规的搜索列表&#xff0c;列表最后一列为操作列&#xff0c;删改查。 眼看着Table 操作列 的配置文件越来越复杂&#xff0c;决定把操作列单独写一个组件&#xff0c;代码瞬间靓仔了些 {title: Operation,dataIndex: oper…

Web APIs阶段

一、Web APIs和JS基础关联性 1.1JS的组成 1.2JS基础阶段以及Web APIs阶段 JS基础阶段&#xff1a;学习的是ECMAScript标准规定的基础语法 Web APIs阶段&#xff1a; Web APIs是W3C组织的标准Web APIs我们主要学习DOM和BOMWeb APIs是JS独有的部分主要学习页面交互功能需要使用…