彩色轉灰度的核心邏輯:三種經典方法及原理對比

灰度實驗

????????將彩色圖像轉換為灰度圖像的過程稱為灰度化,這種做法在圖像處理和計算機視覺領域非常常見。

????????灰度圖與彩色圖最大的不同就是:彩色圖是由R、G、B三個通道組成,而灰度圖只有一個通道,也稱為單通道圖像,所以彩色圖轉成灰度圖的過程本質上就是將R、G、B三通道合并成一個通道的過程。本實驗中一共介紹了三種合并方法,分別是最大值法、平均值法以及加權均值法。

1.灰度圖

????????每個像素只有一個采樣顏色的圖像,這類圖像通常顯示為從最暗黑色到最亮的白色的灰度,盡管理論上這個采樣可以任何顏色的不同深淺,甚至可以是不同亮度上的不同顏色。灰度圖像與黑白圖像不同,在計算機圖像領域中黑白圖像只有黑色與白色兩種顏色;但是,灰度圖像在黑色與白色之間還有許多級的顏色深度。灰度圖像經常是在單個電磁波頻譜如可見光內測量每個像素的亮度得到的,用于顯示的灰度圖像通常用每個采樣像素8位的非線性尺度來保存,這樣可以有256級灰度

2.最大值法

????????對于彩色圖像的每個像素,它會從R、G、B三個通道的值中選出最大的一個,并將其作為灰度圖像中對應位置的像素值。

????????例如某圖像中某像素點的像素值如上圖所示,那么在使用最大值法進行灰度化時,就會從該像素點對應的RGB通道中選取最大的像素值作為灰度值,所以在灰度圖中的對應位置上,該像素點的像素值就是121。

示例:

import cv2 as cv
import numpy as np# 讀取圖像
pig = cv.imread('../images/pig.png')
shape = pig.shape # (h, w, c)
img = np.zeros((shape[0], shape[1]), dtype='uint8')
# 循環遍歷每一行img[0,0,0]
for i in range(shape[0]):   # [0,0][0,1][0,2][1,0]for j in range(shape[1]):img[i, j] = max(pig[i, j, 0], pig[i, j, 1], pig[i, j, 2])cv.imshow('最大值', img)
cv.waitKey(0)
cv.destroyAllWindows()

結果如圖:

3.平均值法

????????對于彩色圖像的每個像素,它會將R、G、B三個通道的像素值全部加起來,然后再除以三,得到的平均值就是灰度圖像中對應位置的像素值。

?????????例如某圖像中某像素點的像素值如上圖所示,那么在使用平均值進行灰度化時,其計算結果就是(91+121+46)/3=86(對結果進行取整),所以在灰度圖中的對應位置上,該像素點的像素值就是86。

示例:

import cv2 as cv
import numpy as np# 讀取圖像
pig = cv.imread('../images/pig.png')
shape = pig.shape # (h, w, c)
img = np.zeros((shape[0], shape[1]), dtype='uint8')
# 循環遍歷每一行img[0,0,0]
for i in range(shape[0]):   # [0,0][0,1][0,2][1,0]for j in range(shape[1]):# int():轉化為更大數據類型,防止溢出img[i, j] = (int(pig[i, j, 0]) + int(pig[i, j, 1]) + int(pig[i, j, 2])) // 3cv.imshow('平均值', img)
cv.waitKey(0)
cv.destroyAllWindows()

結果如下:

?4.加權平均值法

????????對于彩色圖像的每個像素,它會按照一定的權重去乘以每個通道的像素值,并將其相加,得到最后的值就是灰度圖像中對應位置的像素值。本實驗中,權重的比例為: R乘以0.299,G乘以0.587,B乘以0.114,這是經過大量實驗得到的一個權重比例,也是一個比較常用的權重比例。

????????所使用的權重之和應該等于1。這是為了確保生成的灰度圖像素值保持在合理的亮度范圍內,并且不會因為權重的比例不當導致整體過亮或過暗。

?????????例如某圖像中某像素點的像素值如上圖所示,那么在使用加權平均值進行灰度化時,其計算結果就是10*0.299+121*0.587+46*0.114=79。所以在灰度圖中的對應位置上,該像素點的像素值就是79。

示例

?5.兩個極端的灰度值

????????在灰度圖像中,“極端”的灰度值指的是亮度的兩個極端:最暗和最亮的值。

  • 最暗的灰度值:0。這代表完全黑色,在灰度圖像中沒有任何亮度。

  • 最亮的灰度值:255。這代表完全白色,在灰度圖像中具有最大亮度。

總結

????????灰度圖作為單通道圖像,通過將彩色圖的 R、G、B 三通道信息合并為單一通道實現,其像素值范圍通常為 0-255(8 位存儲),包含從黑到白的多級灰度,區別于僅含黑白兩色的黑白圖像。

三種灰度化方法各有特點:

  • 最大值法:取每個像素 R、G、B 三通道中的最大值作為灰度值,操作簡單但可能導致圖像偏亮;
  • 平均值法:計算三通道值的算術平均值作為灰度值,能均衡保留亮度信息,但未考慮人眼對不同顏色的敏感度差異;
  • 加權均值法:按 R=0.299、G=0.587、B=0.114 的權重計算加權和(權重和為 1),因貼合人眼對綠色更敏感、對藍色較遲鈍的特性,是應用最廣泛的方法,能生成更符合視覺感知的灰度圖。

????????此外,文中還提及灰度圖的兩個極端值 ——0(最暗黑色)和 255(最亮白色),它們是灰度范圍的邊界,決定了圖像的明暗對比上限。

????????通過本文的實驗與解析,可清晰理解不同灰度化方法的原理及適用場景,為后續圖像處理(如特征提取、邊緣檢測)奠定基礎。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/916367.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/916367.shtml
英文地址,請注明出處:http://en.pswp.cn/news/916367.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Spring Boot 項目啟動自動執行邏輯的最佳實踐:掌握 CommandLineRunner

前言 Spring Boot 啟動階段,總有些操作迫不及待沖在前線:配置要加載,數據要準備,日志要搶首發,仿佛個個爭當“啟動 MVP”。如果你也想讓項目一啟動就自動開工,少寫點手動觸發的“苦力邏輯”,那 CommandLineRunner 就是你的得力助手。它像那個永遠第一個打卡的同事,不喝…

高可用集群KEEPALIVED的詳細部署

一.高可用集群 1.1 集群類型 LB:Load Balance 負載均衡 LVS/HAProxy/nginx(http/upstream, stream/upstream) HA:High Availability 高可用集群 數據庫、Redis SPoF: Single Point of Failure,解決單點故障 HPC&#x…

[論文閱讀] 人工智能 + 軟件工程 | NoCode-bench:評估LLM無代碼功能添加能力的新基準

NoCode-bench:評估LLM無代碼功能添加能力的新基準 論文:NoCode-bench: A Benchmark for Evaluating Natural Language-Driven Feature Addition 研究背景:當AI嘗試給軟件"加新功能",我們需要一張靠譜的"考卷"…

【Git知識】Git 常用知識集合之基礎--分支系統與 Tag 標簽機制

🧰 Git 常用知識集合Git 是程序員的“時間機器”。這份手冊幫你從入門到精通,把 Git 玩明白。1?? Git 基礎操作流程 📌 三步走流程:添加 → 提交 → 推送 git add . # 把所有修改加入暫存區 git commit -m …

深入解析 Spark:關鍵問題與答案匯總

在大數據處理領域,Spark 憑借其高效的計算能力和豐富的功能,成為了眾多開發者和企業的首選框架。然而,在使用 Spark 的過程中,我們會遇到各種各樣的問題,從性能優化到算子使用等。本文將圍繞 Spark 的一些核心問題進行…

Python-初學openCV——對openCV的簡單使用

一、概述1、簡單介紹OpenCV(Open Source Computer Vision Library)是一個開源的計算機視覺庫,旨在為實時圖像處理提供強大的功能。它由Intel開發,現由開源社區維護。OpenCV 提供了跨平臺的解決方案,支持 Windows、Linu…

去中心化時代的通信革命:briefing與cpolar技術融合帶來的安全范式革新

文章目錄前言1.關于briefing2.本地部署briefing3.使用briefing4.cpolar內網穿透工具安裝5.創建遠程連接公網地址6.固定briefing公網地址前言 數字協作本該是提升效率的過程,卻被這些數據管理問題不斷困擾:平臺條款中的監控聲明、跨網絡環境的接入障礙、…

GitHub新手生存指南:AI項目版本控制與協作實戰

點擊 “AladdinEdu,同學們用得起的【H卡】算力平臺”,H卡級別算力,按量計費,靈活彈性,頂級配置,學生專屬優惠。 代碼倉庫創建 分支管理 PR提交 開源項目復現 讀者收獲:掌握團隊開發必備技能…

Axios封裝以及添加攔截器

在前端開發中,http請求層的封裝可以極大提升代碼的復用性和可維護性,本文將完整的用axios封裝接口請求,配置請求與響應攔截器,封裝統一的請求方法全過程。封裝的目的和思路在項目直接用axios發送請求當然沒問題,但是如…

C語言中奇技淫巧04-僅對指定函數啟用編譯優化

相信很多人使用GCC編譯代碼時,都會接觸到gcc -O0/1/2/3/s,知道它可以對工程進行全局優化。 事實上,除了全局優化外,使用GCC擴展方式,我們還可以僅對部分關鍵函數實施差異化編譯優化。 在GCC編譯器中,attrib…

HTML Style 對象深度解析:從基礎到高級應用

一、Style 對象的核心概念定義與作用 Style 對象是 HTML DOM 中用于操作元素內聯樣式的接口,通過 element.style 訪問。它允許動態修改元素的 CSS 屬性,但僅能直接影響內聯樣式(即通過 style 屬性直接寫在標簽中的樣式)。與外部樣…

【C++】定義常量

在 C 中&#xff0c;有兩種簡單的定義常量的方式&#xff1a; 使用 #define 預處理器。使用 const 關鍵字。 #define 預處理器 #include <iostream> using namespace std;#define LENGTH 10 #define WIDTH 5 #define NEWLINE \nint main() {int area; area LENGTH …

基于遺傳算法的多無人車協同偵察與安全保護策略優化

基于遺傳算法的多無人車協同偵察與安全保護策略優化 前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家&#xff0c;覺得好請收藏。點擊跳轉到網站。 1. 引言 1.1 研究背景與意義 隨著無人系統技術的快速發…

python面向對象編程詳解

面向對象編程&#xff08;OOP&#xff09;是一種以對象為核心的編程范式。Python全面支持OOP&#xff0c;主要包含以下核心概念&#xff1a;一、類與對象1.類(Class)類是創建對象的模板或藍圖&#xff0c;它定義了對象的屬性和方法。class Dog:# 類屬性&#xff08;所有實例共享…

快速入門Socket編程——封裝一套便捷的Socket編程——導論

快速入門Socket編程——封裝一套便捷的Socket編程——導論 前言 ? 這里是筆者打算做的Socket編程的第二部分&#xff0c;也就是核心的討論我們Socket編程本身。 導論 ? 我們知道&#xff0c;一個經典的服務器套接字的處理流程是如下的&#xff1a; 創建一個指定傳輸層和網絡層…

【Mermaid 離線工具】Mermaid 流程圖生成器 - 高清PNG輸出,一鍵生成專業級流程圖!

文章目錄 Mermaid 流程圖生成器(離線版本):高效繪圖,離線也能玩轉專業可視化 一、Mermaid:文本繪圖的 “魔法語法” 二、離線版生成器:功能與優勢解析 (一)離線可用,場景更靈活 (二)操作流程:簡單五步,產出專業圖表 (三)界面設計:簡潔直觀,降低使用門檻 三、應…

haproxy原理及實戰部署

一、負載均衡 負載均衡是網絡架構和分布式系統中至關重要的技術&#xff0c;其核心作用是將大量的并發請求或數據流量合理分配到多個服務器&#xff08;或其他資源節點&#xff09;上&#xff0c;從而解決單節點壓力過大、資源利用率低、系統穩定性差等問題。 作用1. 提高系統吞…

jwt 在net9.0中做身份認證

一、新建net9.0項目WebApplication1&#xff0c;安裝包 <ItemGroup><PackageReference Include"Microsoft.AspNetCore.Authentication.JwtBearer" Version"9.0.7" /><PackageReference Include"Swashbuckle.AspNetCore" Version&…

【機器學習深度學習】微調能改變模型“智商”嗎?——模型能力與知識的本質解析

目錄 前言 一、模型的“知識”與“能力”&#xff1a;兩種不同的智能 第一種&#xff1a;淺層知識&#xff08;記憶 模式識別&#xff09; 第二種&#xff1a;深層能力&#xff08;推理 理解&#xff09; 二、微調&#xff1a;改變的是“經歷”&#xff0c;不是“天賦”…

oracle數據庫表空間碎片整理

oracle數據庫表空間碎片整理 表空間碎片情況檢查 表空間碎片問題處理 收縮表 表空間手動整理 exp/imp導出再導入 移動表到新的表空間 表空間碎片情況檢查 對比表實際使用空間和數據文件占用空間: --實際數據占用空間 select tablespace_name,round(sum(bytes/1024/1024/1024…