Python----OpenCV(圖像處理——圖像的多種屬性、RGB與BGR色彩空間、HSB、HSV與HSL、ROI區域)

Python----計算機視覺處理(opencv:像素,RGB顏色,圖像的存儲,opencv安裝,代碼展示)

Python----計算機視覺處理(Opencv:圖片顏色識別:RGB顏色空間,HSV顏色空間,掩膜)

Python----計算機視覺處理(Opencv:ROI圖像切割)

一、圖像的多種屬性

????????圖像的多種屬性 圖像處理涉及到多種屬性,這些屬性可以幫助我們分析和理解圖像的內 容。以下是圖像的一些常見屬性,它們在圖像分類、分割、增強等任務中都起到了至關重要 的作用。

1.1、圖像分類

1.1.1、二值圖像

????????二值圖像表示的意思就是每一個像素點只由0和1構成,0表示黑色,1表示白色,而且這里 的黑色和白色是純黑和純白。

1.1.2、灰度圖像

????????灰度圖像就是一個8位的位圖。什么意思呢?就是說00000001一直到11111111,這就是二 進制表示。如果表示成我們常用的十進制就是0-255。其中0就表示純黑色,255就表示純白 色,中間就是處于純黑色到純白色的相關顏色。

1.1.3、彩色圖像

????????計算機中所有的顏色都可以由R(紅色通道)、G(綠色通道)、B(藍色通道)來組成,其 中每一個通道都有0-255個像素顏色組成。比如說R=234,G=252,B=4就表示黃色。顯示 出來的也是黃色。所以說彩色圖像由三個面構成,分別對應R,G,B。

1.2、顏色屬性

1.2.1、顏色空間

?圖像的顏色可以用不同的顏色空間表示,常見的顏色空間包括:

????????RGB:紅色、綠色和藍色三個通道組成,適用于顯示設備。

????????HSV:色調、飽和度和亮度組成,適用于圖像分割任務。

????????Grayscale(灰度):沒有顏色信息,僅有亮度信息。

????????YCbCr:亮度(Y)和色差(Cb、Cr)分量,常用于視頻編碼。

1.2.2、色調(Hue)

色調是指顏色的種類,通常用于描述色彩本身的感知。例如,紅色、綠色、藍色等。

????????飽和度(Saturation) 飽和度表示顏色的強度或純度,飽和度越高,顏色越鮮艷。

????????亮度(Brightness / Value) 亮度表示顏色的明亮程度,通常用于描述光的強度。

1.3、?幾何屬性

????????尺寸(Size) 圖像的寬度和高度,通常以像素為單位。

????????分辨率(Resolution) 圖像的清晰度,通常由每英寸的像素數(DPI)來表示。較高的 分辨率意味著圖像的細節更多。

????????比例(Aspect Ratio) 圖像寬高的比例,影響圖像的呈現效果和視覺感受。

常見比例:

????????1:1(正方形)

????????4:3(標準電視和舊型電視屏幕比例)

????????16:9(寬屏)

????????3:2(數碼相機和手機照片比例)

????????21:9(超寬屏)

1.4、紋理屬性

????????紋理(Texture)是指圖像中表面特征的模式或結構,它描述了圖像中的細節,如粗糙、平 滑、條紋、波紋等。

紋理的特點:

????????平滑或粗糙:圖像的表面可能是平滑的,也可能是粗糙的。平滑的紋理通常表示圖像中像素值變化較小,粗糙的紋理表示像素值變化較 大。

????????重復性:紋理常常呈現規律性或重復模式,像是平鋪的磚塊、樹皮的紋路等。通過重復性,計算機可以通過算法來識別出特定的紋理。

????????方向性:紋理可能具有一定的方向性,例如條紋、波紋等。方向性紋理的分析能夠提供圖像中物體或區域的結構信息。

????????尺度:紋理的特征可能在不同的尺度上有所不同。某些紋理可能在大尺度下清晰可見,而在小尺度下則難以辨認。

二、RGB與BGR色彩空間

????????OpenCV和PIL讀取圖片的格式分別是BGR和RGB。

????????OpenCV默認通道是BGR的。這是OpenCV的入門大坑之一,BGR是個歷史遺留問題, 為了兼容早年的某些硬件,OpenCV也不好改回來了。

安裝PIL

????????PIL 軟件包提供了基本的圖像處理功能,如:改變圖像大小,旋轉圖像,圖像格式轉換,色 場空間轉換,圖像增強,直方圖處理,插值和濾波等等。????????

pip install Pillow
import cv2
from PIL import Image
import numpy as npimg1=cv2.imread('./images/parrot.png')img2=np.array(Image.open('./images/parrot.png'))print('cv',img1[:10])
'''
cv [[[ 96 142 150][ 87 134 142][ 81 134 144]
'''
print('Image',img2[:10])
'''
Image [[[150 142  96][142 134  87][144 134  81]
'''

如何將RGB與BGR進行轉換

????????顏色變換是imgproc模塊中一個常用的功能。我們生活中大多數看到的彩色圖片都是RGB類 型的,但是在進行圖像處理時需要用到灰度圖、二值圖、HSV、HSI等顏色制式,OpenCV 提供了cvtColor0函數來實現這些功能。

img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)

三、HSB、HSV與HSL

3.1、RGB 的局限性

????????RGB 是我們接觸最多的顏色空間,由三個通道表示一幅圖像,分別為紅色(R),綠色(G)和藍 色(B)。

理由:

????????與人眼感知不完全匹配

????????無法準確表示所有顏色

????????色彩調節不直觀

????????設備依賴性強

3.2、HSB、HSV與HLS概念定義

????????HSB 和 HSV 基本上是相同的,差異主要是在命名上,而實際應用中,HSB 有時用來表示與 光的亮度相關的概念。

HSB 為 色相,飽和度,明度;

HLS 為 色相,飽和度,亮度,

HSV 為 色相,飽和度,明度。

H : 指的是色相(Hue),就是顏色名稱,例如“紅色”、“藍色”,、“綠色”;

S : 指的是飽和度(Saturation),即顏色的純度;

L : (Lightness) 和 B(Brightness)是明度,顏色的明亮程度

import cv2img1=cv2.imread('./images/parrot.png')
img2=cv2.cvtColor(img1,cv2.COLOR_BGR2RGB)
img3=cv2.cvtColor(img1,cv2.COLOR_BGR2HLS)
img4=cv2.cvtColor(img1,cv2.COLOR_BGR2HSV)cv2.imshow('BGR',img1)
cv2.imshow('RGB',img2)
cv2.imshow('HLS',img3)
cv2.imshow('HSV',img4)
cv2.waitKey(0)

四、ROI區域

????????在圖像處理過程中,我們可能會對圖像的某一個特定區域感興趣,該區域被稱為感興趣區域 (Region of Interest,ROI)。在設定感興趣區域 ROI 后,就可以對該區域進行整體操 作。在機器視覺、圖像處理等領域,ROI是一個重要的概念,常用于目標檢測、圖像分割和 物體跟蹤等任務中。

4.1、切片操作

????????Python 中的切片操作允許你從數組中提取子數組(子圖像)。切片的語法是[startend,意味著從 start 開始,到 end-1 結束。

roi = img[20:230, 130:300, :]

20:230 :提取圖像的行范圍。這里表示從第 20 行到第 230 行(包含 20 行,直到 229 行),這是從圖像中提取的垂直區域 (即圖像的高度部分)。

130:300 :提取圖像的列范圍。這里表示從第 130 列到第 300 列(包含 130 列,直到 299 列),這是從圖像中提取的水平區域 (即圖像的寬度部分)。

: :這表示所有的通道。即不限制顏色通道,提取所有的顏色通道(通常是 BGR,即藍色、綠色、紅色三個通道)。

4.2、ROI

import cv2# 讀取圖像
img = cv2.imread('./images/ROI.png')# 打印圖像的形狀(高度、寬度、通道數)
# 例如:(400, 600, 3) 表示高400像素,寬600像素,3個顏色通道(BGR)
print(img.shape)# 將圖像特定區域的藍色通道(索引為0)設置為0
# 區域定義:從行20到行229,從列130到列299
# [20:230] 表示從第20行開始,到第230行(不包含230行)
# [130:300] 表示從第130列開始,到第300列(不包含300列)
# [0] 表示藍色通道(OpenCV默認是BGR順序,所以0是藍色)
img[20:230, 130:300, 0] = 0# 提取圖像的感興趣區域(Region of Interest, ROI)
# 這個ROI是原始圖像中藍色通道被設置為0的同一塊區域
roi = img[20:230, 130:300, :]# 創建ROI的副本
# 這一步很重要,因為如果不使用.copy(),那么對roi的修改也會影響到原始的img圖像
roi = roi.copy()# 將ROI的所有像素的藍色通道設置為0
# 這一操作會使得提取出來的ROI圖像的藍色部分完全消失
roi[:, :, 0] = 0# 顯示修改后的原始圖像(其中一個區域的藍色通道被清除了)
cv2.imshow('images', img)# 顯示提取并修改后的ROI圖像(整個ROI的藍色通道被清除了)
cv2.imshow('roi', roi)# 等待按鍵,0表示無限等待,直到用戶按下任意鍵
cv2.waitKey(0)# 銷毀所有OpenCV創建的窗口
cv2.destroyAllWindows()

五、通道的分割與合并

????????在圖像處理中,通道是圖像數據的重要組成部分。例如,彩色圖像通常由三個通道(RGB 或 BGR)組成,每個通道表示一種顏色分量。在某些場景中,我們可能需要對單個通道進 行操作,這就需要用到 OpenCV 的通道分割與通道合并功能。????????

?5.1、分割通道

????????分割圖像的通道指的是將原始圖像的不同顏色通道提取出來,通常可以通過 csplit0 來完成。

5.2、合并通道

????????將分割出的通道重新合并成一個完整的圖像,可以使用cv.merge()

import cv2
import numpy as np# 讀取圖像
img1 = cv2.imread('./images/parrot.png')# 分離圖像通道
B, G, R = cv2.split(img1)# 創建空白圖像(與原圖尺寸相同)
# np.zeros_like(img1) 創建一個與 img1 形狀和數據類型相同的全零數組。
blank = np.zeros_like(img1)# 創建只包含藍色通道的圖像
# 我們將藍色通道 (B) 與兩個零通道合并,以創建一個只包含藍色信息的圖像。
blue_img = cv2.merge([B, np.zeros_like(B), np.zeros_like(B)])# 創建只包含綠色通道的圖像
# 類似地,我們創建只包含綠色通道的圖像。
green_img = cv2.merge([np.zeros_like(G), G, np.zeros_like(G)])# 創建只包含紅色通道的圖像
# 這是紅色通道的圖像。
red_img = cv2.merge([np.zeros_like(R), np.zeros_like(R), R])# 顯示原始圖像
cv2.imshow('Original Image', img1)# 顯示藍色通道圖像
cv2.imshow('Blue Channel', blue_img)# 顯示綠色通道圖像
cv2.imshow('Green Channel', green_img)# 顯示紅色通道圖像
cv2.imshow('Red Channel', red_img)# 顯示合并后的圖像 (與原始圖像相同)
img2 = cv2.merge([B, G, R])
cv2.imshow('Merged Image', img2)# 等待按鍵
cv2.waitKey(0)# 銷毀所有OpenCV窗口
cv2.destroyAllWindows()

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

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

相關文章

java設計模式[1]之設計模式概覽

文章目錄 設計模式什么是設計模式為什么要學習設計模式設計模式的設計原則設計模式的分類 設計模式 什么是設計模式 設計模式是前人根據經驗的總結,是軟件開發中的最佳實踐,幫助開發者在面對復雜設計問題時提供有效的解決方案。設計模式不僅僅只是一種…

aflplusplus:開源的模糊測試工具!全參數詳細教程!Kali Linux教程!(四)

使用 afl-lto clang LLVM 編譯器 1. -help 顯示可用選項 afl-lto --help 其他選項同上,這里不再展開敘述。 afl-lto 1. -help 顯示可用選項 afl-lto --help 其他選項同上,這里不再展開敘述。 afl-network-client 1. 幫助文檔 afl-network-cl…

區間合并:牛奶

區間合并:牛奶 牛奶 www.acwing.com/problem/content/description/1345/ 本質就是區間合并問題從第一次擠奶才開始計算兩個最長時間 import java.util.*;public class Main {static final int N 5010;static Pair[] pairs new Pair[N];static class Pair imple…

Hive實現值列表橫向展示(非列轉行)

一、場景說明: 當前有各個流程的節點名稱和節點時間。數倉中的表存在的格式為縱向存儲,分別為節點名稱、接收時間 現數據分析過程中需要將每個流程的節點時間橫向展示,如果沒有該節點則置空 這種區別于行轉列和列轉行的操作。(具體可參考博主**

藍橋杯20151 跳石頭

問題描述 小明正在和朋友們玩跳石頭的小游戲,一共有 n 塊石頭按 1 到 n 順序排成一排,第 i 塊石頭上寫有正整數權值 ci? 。 如果某一時刻小明在第 j 塊石頭,那么他可以選擇跳向第 jcj? 塊石頭 (前提 jcj≤n )或者跳…

深度學習——基于卷積神經網絡的MNIST手寫數字識別詳解

文章目錄 引言1. 環境準備和數據加載1.1 下載MNIST數據集1.2 數據可視化 2. 數據預處理3. 設備配置4. 構建卷積神經網絡模型5. 訓練和測試函數5.1 訓練函數5.2 測試函數 6. 模型訓練和評估6.1 初始化損失函數和優化器6.2 訓練過程 7. 關鍵點解析8. 完整代碼9. 總結 引言 手寫數…

Activiti初識

文章目錄 1 工作流介紹1_工作流概念介紹2 工作流系統3 適用行業4 具體應用5 實現方式 2 Activiti介紹1_BPM2 BPM 軟件3 BPMN 3 使用步驟1_部署 activiti2 流程定義3 流程定義部署4 啟動一個流程實例5 用戶查詢待辦任務(Task)6 用戶辦理任務7 流程結束 4 Activiti應用1_Activiti…

CyclicBarrier入門代碼解析

文章目錄 核心思想:組隊出游,人到齊了才出發 🚌最簡單易懂的代碼示例代碼解析運行效果分析CyclicBarrier vs CountDownLatch 的關鍵區別CyclicBarrier在業務系統里面通常有什么常用的應用場景核心應用模式1. 數據并行處理與ETL(最…

Maven 配置中繞過 HTTP 阻斷機制的完整解決方案

Maven 配置中繞過 HTTP 阻斷機制的完整解決方案 一、背景與問題分析 自 Maven 3.8.1 版本起&#xff0c;出于安全考慮&#xff0c;默認禁止了對 HTTP 倉庫的訪問。這一機制通過 <mirror> 配置中的 maven-default-http-blocker 實現&#xff0c;其作用是攔截所有使用 HT…

【大廠機試題解法筆記】恢復數字序列

題目 對于一個連續正整數組成的序列&#xff0c;可以將其拼接成一個字符串&#xff0c;再將字符串里的部分字符打亂順序。如序列8 9 10 11 12,拼接成的字符串為89101112,打亂一部分字符后得到90811211,原來的正整數10就被拆成了0和1。 現給定一個按如上規則得到的打亂字符的字…

MongoDB 事務有哪些限制和注意事項?

MongoDB 的多文檔 ACID 事務雖然強大&#xff0c;但在使用時確實有一些限制和需要特別注意的事項。 以下是主要的限制和注意事項&#xff1a; 1. 性能開銷 (Performance Overhead) 額外協調: 事務需要額外的協調工作&#xff0c;包括跟蹤事務狀態、管理鎖&#xff08;即使是樂…

CTF實戰技巧:獲取初始權限后如何高效查找Flag

CTF實戰技巧&#xff1a;獲取初始權限后如何高效查找Flag 在CTF比賽中&#xff0c;獲得初始訪問權限只是開始&#xff0c;真正的挑戰在于如何在系統中高效定位Flag。本文將分享我在滲透測試中總結的系統化Flag搜索方法&#xff0c;涵蓋Linux和Windows雙平臺。 引言&#xff1a;…

kafka Tool (Offset Explorer)使用SASL Plaintext進行身份驗證

一、前面和不需要認證的情況相同&#xff1a; 1、填寫Properties中的cluster name和版本&#xff0c;以及zk的ip和port 2、Advanced中填寫bootstrap servers 二、和不需要認證時不同的點&#xff1a; 1、Security的Type&#xff0c;不需要認證時選plaintext&#xff0c;需要認…

最小費用最大流算法

最小費用最大流算法 原理 問題:網絡中有源點(起點)和匯點(終點),每條邊有流量上限和單位流量費用。求: 從源點到匯點的最大流量在流量最大的前提下,總費用最小核心思想:在找增廣路時,選擇單位費用之和最小的路徑(使用SPFA找最短路) 實現步驟 建圖:使用鏈式前向…

從匯編的角度揭開C++ this指針的神秘面紗(上)

C中的this指針一直比較神秘。任何類的對象&#xff0c;都有一個this指針&#xff0c;無處不在。那么this指針的本質究竟是什么&#xff1f;this指針什么時候會被用到&#xff1f;今天通過幾段簡單的代碼&#xff0c;來揭秘一下。 要先揭秘this指針&#xff0c;先來說一下函數調…

18 - GCNet

論文《GCNet: Non-local Networks Meet Squeeze-Excitation Networks and Beyond》 1、作用 GCNet通過聚合每個查詢位置的全局上下文信息來捕獲長距離依賴關系&#xff0c;從而改善了圖像/視頻分類、對象檢測和分割等一系列識別任務的性能。非局部網絡&#xff08;NLNet&…

人工智能學習17-Pandas-查看數據

人工智能學習概述—快手視頻 人工智能學習17-Pandas-查看數據—快手視頻

RV1126+OPENCV在視頻中添加LOGO圖像

一.RV1126OPENCV在視頻中添加LOGO圖像大體流程圖 主要是利用RV1126的視頻流結合OPENCV的API在視頻流里面添加LOGO圖像&#xff0c;換言之就是在RV1126的視頻流里面疊加圖片。大體流程我們來看上圖&#xff0c;要完成這個功能我們需要創建兩個線程(實際上還有初始化過程&#xf…

汽車制造通信革新:網關模塊讓EtherCAT成功對接CCLINK

?在現代工業自動化生產領域&#xff0c;不同品牌和類型的設備往往采用不同的通信協議&#xff0c;這給設備之間的互聯互通帶來了挑戰。某汽車制造企業的生產線上&#xff0c;采用了三菱FX5U PLC作為主站進行整體生產流程的控制和調度&#xff0c;同時配備了庫卡機器人作為從站…

vue父類跳轉到子類帶參數,跳轉完成后去掉參數

當通過路由導航的時候&#xff0c;由于父類頁面帶參數到子類&#xff0c;導致路徑上面有參數 這樣不僅不美觀&#xff0c;而且在點擊導航菜單按鈕時還會有各種問題&#xff0c;這時我們只需要將路由后面的參數去掉就好了&#xff0c;在子頁面mounted()函數里面獲取到父類的參數…