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.pswp.cn/news/901727.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/901727.shtml
英文地址,請注明出處:http://en.pswp.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獨有的部分主要學習頁面交互功能需要使用…