計算機視覺(opencv)實戰一——圖像本質、數字矩陣、RGB + 圖片基本操作(灰度、裁剪、替換等)

OpenCV 入門教程:

OpenCV(Open Source Computer Vision Library)是一個開源的計算機視覺庫,廣泛應用于圖像處理、視頻分析、機器學習等領域。

在 Python 中,cv2 是 OpenCV 的主要接口模塊。本文將帶你一步步掌握 cv2 庫的安裝與基本圖像處理功能。


圖像的本質:像素的數字矩陣

任何數字圖像(如照片、截圖、手寫數字圖片)都是由無數個微小的 “像素點”(Pixel)組成的

  • 每個像素點的數值含義

    • 對于灰度圖(如代碼中的手寫數字),每個像素用一個 0-255 的整數表示亮度:0 代表純黑,255 代表純白,中間值表示不同深淺的灰色。
    • 對于彩色圖(如 RGB 格式),每個像素由三個數值(R、G、B)組成,分別對應紅、綠、藍三種顏色的亮度,組合后呈現出各種顏色。

彩色圖的單個像素點:[0-255,0-255,0-255]:

如:[123, 85, 34]↑    ↑   ↑B    G   R
在 OpenCV 中默認是 BGR,而不是 RGB

灰度圖示例:


什么是RGB(Red, Green, Blue):

光學三原色(RGB):紅、綠、藍

通過將紅色(R)、綠色(G)、藍色(B)三種顏色以不同強度組合,形成各種顏色。

RGB顏色
25500紅色
02550綠色
00255藍色
255255255白色
000黑色
2552550黃色

百度搜索 “RGB調色板” ,我們通過調色來具體對比來看看:

將第一個像素對應的R、G、B輸入調色板后得到的顏色? 與? 像素切片篇左上角的像素顏色? 相同:

注意:這里的三個數組并不是直接 print(image) 打印出來的結果。

print打印出來的結果是

而是分離通道:(本文章第七節會教,此處有印象即可)

B = img1[:, :, 0] ? # 藍色B通道
G = img1[:, :, 1] ? # 綠色G通道
R = img1[:, :, 2] ? # 紅色R通道

或者:
B, G, R = cv2.split(img1)

得到被分開的R、G、B的單獨的顏色數據,同時數據的位置對應每個像素的位置


一、安裝 OpenCV 并查看版本

安裝命令

pip install opencv-python
pip install opencv-contrib-python

?? 注意:opencv-contrib-python 是包含更多實驗性模塊和擴展功能的版本,如果你需要 SIFT、SURF 等模塊,可安裝:

安裝完成后,可以通過如下方式驗證 OpenCV 是否成功安裝:

import cv2
print("OpenCV 版本:", cv2.__version__)


二、讀取與顯示圖像(解析圖像的矩陣)

完整圖片(可保存):(或者直接百度搜索企鵝,在點開圖片欄,應該第一個或第二個就是)

該圖片的第一行的數字矩陣:

可以看到數字矩陣有1600行,3列

1600表示這個圖片一行有1600個像素點

3表示每個像素點的BGR的數字組成

import cv2
img = cv2.imread("penguin.jpg")
# print(img)   #打印圖片的數字矩陣(設置斷點,調試時可以更直觀)cv2.imshow('qie',img)
a = cv2.waitKey(5000)   # 展示5秒時間(參數為0:一直執行,需要按鍵關閉)
print(a)   # 如果按下按鍵,獲取按鍵的ascll碼值
cv2.destroyAllWindows()   # 關閉所有打開的窗口并釋放所有相關內存。print("圖像形狀(shape):",img.shape)
print("圖像數據類型(dtype)",img.dtype)
print("圖像大小(size)",img.size)

說明:

  • cv2.imread():讀取圖像。

  • cv2.imshow():展示圖像窗口。單引號‘’內為標題

  • cv2.waitKey(ms):等待鍵盤事件,單位為毫秒。若為 0,表示一直等待。

  • cv2.destroyAllWindows():關閉所有窗口。

  • img.shape:返回圖像的尺寸 (高度, 寬度, 通道數)

結果:

圖像形狀(shape):(1200, 1600, 3)

數字含義
1200圖像的高度(行數)= 有 1200 像素行
1600圖像的寬度(列數)= 有 1600 像素列
3每個像素有 3 個通道(通常為 BGR 或 RGB)

該圖像是一個 彩色圖像(3通道),大小為 1600(列)×1200(行) 像素,使用的是 BGR 色彩空間(在 OpenCV 中默認是 BGR,而不是 RGB)。

圖像數據類型(dtype): uint8

  • uint8無符號 8 位整數unsigned int 8)。

  • 每個像素的每個通道用一個字節(8 位)來表示。

  • 取值范圍是 0 ~ 255

圖像大小(size) 5760000

  • shape(1200, 1600, 3)

    • 高度(行數):1200 像素

    • 寬度(列數):1600 像素

    • 每個像素有 3 個顏色通道(B、G、R)

  • dtypeuint8(每個通道值占 1 字節)

那么:

size = 1200 × 1600 × 3 = 5760000

所以,這個圖像共有 5760000 個像素值(也可以理解為字節數)。


三、圖像縮放

import cv2
img = cv2.imread('penguin.jpg')
img_resize = cv2.resize(img, (400, 400))
cv2.imshow('img',img)
cv2.imshow('img_resize',img_resize)
cv2.waitKey(0)
cv2.destroyAllWindows()

說明:

  • cv2.resize() 支持調整圖像分辨率,常用于適配模型或顯示需求。


四、讀取灰度圖像并保存

讀取圖片時直接處理成灰度

import cv2
img = cv2.imread(r'./penguin.jpg', cv2.IMREAD_GRAYSCALE)
cv2.imshow('penguin_gray',img)
a = cv2.waitKey(0)
print(a)
cv2.destroyAllWindows()print("圖像形狀(shape):",img.shape)
print("圖像數據類型(dtype)",img.dtype)
print("圖像大小(size)",img.size)cv2.imwrite('penguin_gray.jpg', img) #保存灰度圖片

或:

讀取彩色圖片后,cv2.cvtColor()進行顏色空間轉換

img = cv2.imread('penguin.jpg')
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

說明:

  • 使用 cv2.IMREAD_GRAYSCALE 可將圖像讀取為灰度格式。

  • cv2.cvtColor() 進行顏色空間轉換。

  • cv2.imwrite() 用于保存圖像。


五、圖像裁剪

import cv2
img1 = cv2.imread('penguin.jpg')
img2 = img1[150:350,500:700]
cv2.imshow('penguin',img1)
cv2.imshow('penguin_head',img2)
cv2.waitKey(0)
cv2.destroyAllWindows()

說明:

  • 圖像裁剪可通過 NumPy 的數組切片完成。


六、讀取視頻文件或攝像頭

import cv2
video_capture = cv2.VideoCapture('video1.mp4')   # 若參數為0,則為攝像頭
if not video_capture.isOpened():print("無法打開")exit()
while True:ret, frame = video_capture.read()if not ret:breakframe = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)cv2.imshow('Video', frame)if cv2.waitKey(1) == 27:    # 數字為每一幀的間隔break
video_capture.release()
cv2.destroyAllWindows()
攝像頭讀幀:video_capture = cv2.VideoCapture(0)

說明:

  • cv2.VideoCapture() 可打開視頻文件或0攝像頭。

  • video_capture.isOpened():檢查攝像頭是否成功打開,返回True(成功)或False(失敗)。

  • cv2.cvtColor() 進行顏色空間轉換。

  • ret, frame = video_capture.read()

    • video_capture.read():從攝像頭讀取一幀圖像。
    • 返回兩個值:ret是布爾值(True表示讀取成功,False表示失敗,如攝像頭斷開);frame是讀取到的圖像幀(numpy 數組格式)。


七、分離與合并顏色通道

分離通道指的是將一個三通道彩色圖像拆成 三個單通道灰度圖

所以每個圖只表示一個顏色成分的強度(所有顏色都由紅藍綠三原色組成)

import cv2
img1 = cv2.imread('penguin.jpg')
# =====分離顏色通道=====
# 兩種分離方式:
# B = img1[:, :, 0]   # 藍色B通道
# G = img1[:, :, 1]   # 綠色G通道
# R = img1[:, :, 2]   # 紅色R通道
B, G, R = cv2.split(img1)
cv2.imshow('B', B)
cv2.imshow('G', G)
cv2.imshow('R', R)
cv2.waitKey(0)
# =====合并顏色通道=====
img2 = cv2.merge([B, G, R])
cv2.imshow('RGB', img2)
cv2.waitKey(0)
cv2.destroyAllWindows()

說明:

  • cv2.split() 分離 B、G、R 通道。

  • cv2.merge() 合并通道生成彩色圖像。

通過調試觀察數據組成:

可以看到數據的上面是


八、區域像素替換與圖像合成

7.1 用隨機像素填充圖像區域(打碼):

import cv2
import numpy as np
img = cv2.imread('penguin.jpg')
img[150:350,500:700] = np.random.randint(0,256,(200,200,3))
cv2.imshow('penguin_head',img)
cv2.waitKey(0)
cv2.destroyAllWindows()

7.2 圖像區域拷貝與粘貼(換頭):

import cv2
img1 = cv2.imread('penguin.jpg')
img2 = cv2.imread('penguin.jpg')# head = img1[150:350,500:700]
# img2[250:450,1000:1200] = head
head = img1[250:450,1000:1200]
img2[150:350,500:700] = headcv2.imshow('img1',img1)
cv2.imshow('img2',img2)
cv2.waitKey(0)
cv2.destroyAllWindows()

說明:

  • 通過數組操作,可輕松實現區域復制與圖像拼接。


總結

通過本教程,我們學習了 OpenCV 的以下基礎內容:

功能使用方法
圖像讀取cv2.imread()
圖像展示cv2.imshow()
灰度圖轉換cv2.IMREAD_GRAYSCALEcv2.cvtColor()
圖像裁剪NumPy 切片
視頻讀取cv2.VideoCapture()
通道分離與合并cv2.split()cv2.merge()
圖像縮放cv2.resize()
圖像保存cv2.imwrite()

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

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

相關文章

《探索C++ set與multiset容器:深入有序唯一性集合的實現與應用》

前引:在STL的關聯式容器中,set以其嚴格的元素唯一性和自動排序特性成為處理有序數據的核心工具。其底層基于紅黑樹(Red-Black Tree)實現,保證了O(log n)的查找、插入與刪除復雜度!本文將從底層原理切入&…

各測試平臺功能對比分析(ITP,Postman,Apifox,MeterSphere)

對比ITP與Postman,Apifox,MeterSphere 功能特性ITPPostmanApifoxMeterSphere接口測試? 可視化接口調試,支持多種請求方式? 支持? 支持? 支持場景測試? 多接口串聯測試,支持前后置腳本? Collections功能? 支持? 支持定時任務? 基于Celery的定時…

開源日志log4cplus—如何將 string類型轉為tstring類型,又如何將char*類型轉換為tstring類型?

文章目錄🔧 一、理解 log4cplus::tstring 的本質?? 二、std::string 轉 tstring 的三種方法? 1. 使用內置宏 LOG4CPLUS_STRING_TO_TSTRING(推薦)? 2. 手動條件編譯轉換(精細控制)? 3. 多字節模式下的直接賦值??…

深度學習之CNN網絡簡介

CNN網絡簡單介紹 1.概述 卷積神經網絡(Convolutional Neural Network,CNN)是一種專門用于處理具有網格狀結構數據的深度學習模型。 ? CNN網絡主要有三部分構成:卷積層、池化層和全連接層構成,其中卷積層負責提取圖像中…

【微實驗】基頻提取的MATLAB實現(優化版)

前情提要: 【超詳細】科普:別再只會用自相關!YIN 和 PYIN 如何破解音頻隱藏密碼?-CSDN博客 【微實驗】媽媽我的MATLAB會識別聲音的基頻了!-CSDN博客 今天用MATLAB把算法封裝成函數,然后調用對比結果。 …

開發 npm 包【詳細教程】(含發布 npm 包,版本號升級,修改包后重新發布等)

1. 給 npm 包取個【唯一】的名字! npm 包命名規范 只能包含小寫字母(a-z)、數字(0-9)、連字符(-) 和 下劃線(_),不能包含空格、大寫字母、標點符號&#xff…

Secure 第三天作業

實驗需求:1.參考以上拓撲所示,完成以下需求:1) 配置各設備 IP 地址2) 配置 ZBFW,Inside-1 和 nside-2 屬于內部 Zone,Outside-1 屬于外部 Zonezone security insidezone security outsidezone-p…

Linux應用層-5.計算機網絡(菜鳥學習筆記)

計算機網絡的核心是連接與通信,從底層的物理信號到上層的應用服務,各層協議協同工作---------------------------------------------------------------------------------------一.計算機網絡分類(按范圍)1?個人區域網&#xff…

[論文閱讀] 人工智能 + 軟件工程 | 大型語言模型對決傳統方法:多語言漏洞修復能力大比拼

大型語言模型對決傳統方法:多語言漏洞修復能力大比拼 論文閱讀:On the Evaluation of Large Language Models in Multilingual Vulnerability RepairarXiv:2508.03470 On the Evaluation of Large Language Models in Multilingual Vulnerability Repair…

計算機網絡2-3:傳輸方式

目錄 串行傳輸和并行傳輸 同步傳輸和異步傳輸 單工、半雙工以及全雙工通信 總結 串行傳輸和并行傳輸 并行傳輸的優點是速度為串行傳輸的n倍,但也存在一個嚴重的缺點即成本高 同步傳輸和異步傳輸 單工、半雙工以及全雙工通信 總結

文檔生成PPT軟件哪個好?深度測評8款word轉ppt生成工具

在日常辦公與教學場景中,如何高效地將Word文檔內容轉化為專業PPT,一直是職場人士、教育工作者及內容創作者的共同痛點。隨著AI技術的普及,一鍵式轉換工具應運而生,它們不僅能精準識別Word中的標題與段落結構,還能自動套…

Azimutt:一款免費開源的多功能數據庫工具

Azimutt 是一款支持數據庫設計、表結構探索與分析、數據查詢以及數據庫文檔生成功能的全棧工具。 Azimutt 是一個免費開源的項目,源代碼托管在 GitHub: https://github.com/azimuttapp/azimutt 功能特性 多數據庫支持:包括主流數據庫 MySQ…

智算賦能:移動云助力“世界一流數據強港”建設之路

2024年5月,某創新產業園區智算中心正式揭牌成立。臺下響起的掌聲不僅是對一個項目的祝賀,更是客戶對未來的期許—— 推動產業結構優化升級,領跑數字經濟轉型發展。5家500強企業、8家上市企業、17家獨角獸企業……該創新產業園區在成為“世界一…

達夢自定義存儲過程實現獲取表完整的ddl語句

--導出表的ddl CREATE OR REPLACE PROCEDURE show_create_table( db IN varchar(255), tb IN varchar(255)) ASsql1 text;ret text : ;cmt text :;sql2 text :; BEGINFOR WSX IN (select TABLEDEF(db,tb) as ddl from dual) LOOPret: ret||WSX.DDL;END LOOP;ret : ret||chr(10…

【ARM】keil提示UVISION: Error: Encountered an improper argument

1、 文檔目標 解決MDK退出debug模式后,提示UVISION: Error: Encountered an improper argument。 2、 問題場景 在退出Debug模式的時候,彈出提示窗口,提示:UVISION: Error: Encountered an improper argument。(如圖…

【2025最新版】PDF24 Creator,PDF編輯,合并分割,格式轉換全能工具箱,本地離線版本,完全免費!

軟件介紹(文末獲取)這款軟件于1999年開發,至今已經有26年了,這26年里它都完全免費!簡潔的操作界面,讓用戶輕松上手,高效完成 PDF 文件的處理,方便又實用。這次給大家帶來的是一個本地…

如何使用VLLM進行openai/gpt-oss系列推理與支持工具調用

OpenAI時隔6年再次推出開源模型gpt-oss系列,本次gpt-oss系列包含兩個模型gpt-oss-120b與gpt-oss-20b。由于模型原生支持一種新的量化技術MXFP4,所以模型的部署所需的顯存也顯著的降低。openai/gpt-oss-20b 只需要大概16GB的顯存openai/gpt-oss-120b 需要…

SVN 查看歷史信息

SVN 查看歷史信息 引言 Subversion(簡稱SVN)是一個開源的版本控制系統,廣泛應用于軟件開發中。查看SVN的歷史信息對于了解代碼變更、追蹤問題來源以及理解項目發展歷程具有重要意義。本文將詳細介紹如何在SVN中查看歷史信息。 SVN歷史信息概述…

vue+flask山西非遺文化遺產圖譜可視化系統

文章結尾部分有CSDN官方提供的學長 聯系方式名片 文章結尾部分有CSDN官方提供的學長 聯系方式名片 關注B站,有好處!編號:F068 項目介紹: 本系統主要實現了以下功能: 非遺項目知識圖譜可視化 非遺項目可視化關鍵詞分析 …

Jetson NX Python環境搭建:使用APT輕松安裝NumPy, scikit-learn, OpenCV

引言 在NVIDIA Jetson NX等ARM架構的嵌入式AI板子上搭建Python開發環境,特別是安裝像NumPy、OpenCV這樣包含C/C底層代碼的科學計算庫時,經常會遇到編譯失敗、耗時過長或依賴沖突等問題。這些問題尤其在通過pip從源代碼編譯安裝時更為突出,例如…