計算機視覺(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/news/917968.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/917968.shtml
英文地址,請注明出處:http://en.pswp.cn/news/917968.shtml

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

相關文章

【數據庫】使用Sql Server創建索引優化查詢速度,一般2萬多數據后,通過非索引時間字段排序查詢出現超時情況

大家好,我是全棧小5,歡迎來到《小5講堂》。 這是《Sql Server》系列文章,每篇文章將以博主理解的角度展開講解。 溫馨提示:博主能力有限,理解水平有限,若有不對之處望指正! 目錄前言SQL 創建索引…

MyBatis聯合查詢

文章目錄數據庫設計MyBatis 配置MyBatis 映射文件Mapper 接口總結數據庫設計 建表 SQL CREATE TABLE user (id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(50) NOT NULL );CREATE TABLE order (id INT PRIMARY KEY AUTO_INCREMENT,user_id INT NOT NULL,order_no VARCHAR(…

項目中使用的設計模式

項目中使用的設計模式請列舉幾個項目中常用的設計模式什么是設計模式,在項目中使用了那些設計模式動態代理模式JDK動態代理CGLIB動態代理單例模式懶漢式(非線程安全)餓漢式懶漢式(線程安全)工廠模式觀察者模式裝飾器模…

實戰教程:從“對象文件為空“到倉庫重生——修復 Git 倉庫損壞全記錄

文章目錄實戰教程:從"對象文件為空"到倉庫重生——修復 Git 倉庫損壞全記錄案發現場:一個嚴重損壞的倉庫修復之旅:四步讓倉庫重獲新生準備工作:創建安全備份第 1 步:清理戰場——刪除所有空對象第 2 步&…

ansible 操作家族(ansible_os_family)信息

1. 操作系統系列 (ansible_os_family)ansible web -m setup -a filteransible_os_family2. 操作系統家族為 RedHat 時執行任務--- - hosts: websrvsremote_user: roottasks:- name: Install package on RedHat systemsyum:name: httpdstate: presentwhen…

一文學會c++繼承 組合

文章目錄繼承簡介定義訪問限定符和繼承方式?基類派生類賦值轉換繼承的作用域派生類的默認成員函數繼承與友元繼承與靜態成員?復雜的菱形繼承虛擬繼承組合繼承簡介 繼承是面向對象程序設計代碼復用的重要手段,使得程序員可以在保持原類的基礎上擴展,新…

.Net下載共享文件夾中的文件

由于IIS站點權限等問題,總是沒找到處理辦法,所以改用外掛的winform的方式來下載共享文件(也可以改為使用windows服務的方式)。 前提需要先在資源管理器中登錄到共享文件夾,確保系統能訪問。 服務端代碼 (.NET后端) usi…

目標檢測數據集 - 眼睛瞳孔檢測數據集下載「包含COCO、YOLO兩種格式」

數據集介紹:眼睛瞳孔檢測數據集,真實采集高質量人臉眼部圖片數據,適用于人臉定位、人臉疾病如白內障等疾病的視覺檢測。數據標注標簽包括 eyepupil 瞳孔一 個缺陷類別;適用實際項目應用:眼睛瞳孔檢測項目,以…

Keil MDK-ARM V5.42a 完整安裝教程

文章目錄一、安裝前期準備二、Keil MDK-ARM 主程序安裝三、器件支持包(Pack)安裝四、許可證激活五、安裝驗證Keil MDK(Microcontroller Development Kit)是針對 Arm Cortex-M 系列微控制器的專業開發環境,集成了 μVis…

WPF中引用其他元素各種方法

在WPF中,引用其他元素的方式有多種,每種方式適用于不同場景,各有優缺點。除了x:Reference,常用的還有以下幾種: 一、ElementName 綁定(最常用的XAML綁定方式) 通過元素的x:Name屬性引用同一作用…

Python生成統計學公式

一元線性回歸模型 2.1回歸分析概述/25 一、回歸分析基本概念/25 二、總體回歸函數/27 三、隨機誤差項/29 四、樣本回歸函數/30 2.2 一元線性回歸模型的參數估計/32 一、參數估計的普通最小二乘法/32 二、擬合優度/35 2.3基本假設與普通最小二乘估計量的統計性質/36 一、一元線性…

網絡工程師--華為命令專題

一、交換機 交換機分類:1.根據交換方式劃分:(1)存儲轉發式交換(Store and Forward)(2)直通式交換(Cut-through)(3)碎片過濾式交換&…

判斷可編輯div的光標是否在最前面

要判斷一個可編輯div(contenteditable)中的光標是否位于最前面,可以使用以下幾種方法: 方法一:使用Selection和Range API function isCaretAtStart(div) {const selection window.getSelection();if (selection.rangeCount 0) return false…

【unity實戰】使用Unity程序化生成3D隨機地牢(附項目源碼)

最終效果 文章目錄最終效果前言1、理解程序生成的核心概念2、種子值的核心作用3、程序生成的實際應用4、主流程序生成技術概覽5、選擇合適的技術實戰1、素材2、生成一面墻變換矩陣數據3、渲染墻壁4、加點隨機不同的墻壁效果5、繪制四面墻壁4、在四個角落生成支柱5、生成地板6、…

多賬號管理方案:解析一款免Root的App分身工具

之前有小伙伴問阿燦有沒有可以軟件分身的免費軟件,后來阿燦找到了一款可以無限分身的app感覺很實用,只有10M大小 02軟件介紹說白了它能給各種app和游戲做分身,包括V信、qQ、某音、某付寶這些,而且支持最新的安卓15系統。每個分身…

(附源碼)基于PHP和Vue的網上購物平臺

內容摘要 內容摘要: 隨著互聯網技術的迅猛發展,網上購物已成為人們日常生活的重要組成部分。本文圍繞PHPVue技術棧構建的網上購物平臺展開研究,深入探討了該平臺的架構設計與實現細節。平臺前端采用Vue框架,利用其組件化開發和數據驅動的特性…

51單片機

中斷系統1.什么是中斷當CPU正在處理某件事的時候外界發生了緊急事件請求,要求CPU暫停當前的工作,轉而去處理這個緊急事件,處理完以后,再回到原來被中斷的地方,繼續原來的工作,這樣的過程稱為中斷2.為什么要…

前端開發:HTML(5)—— 表單

下面我們來學習表單。 目錄 什么是Web表單? 表單標簽 1.form標簽 2.輸入框 文本框和密碼框 單選框和復選框 1.單選框 2.復選框 3.按鈕 (1)普通按鈕 (2)提交按鈕 (3)重置按鈕 &#…

【YOLOv8改進 - C2f融合】C2f融合SFS-Conv(空間 - 頻率選擇卷積)提升特征多樣性,同時減少參數和計算量

YOLOv8目標檢測創新改進與實戰案例專欄 專欄目錄: YOLOv8有效改進系列及項目實戰目錄 包含卷積,主干 注意力,檢測頭等創新機制 以及 各種目標檢測分割項目實戰案例 專欄鏈接: YOLOv8基礎解析+創新改進+實戰案例 文章目錄 YOLOv8目標檢測創新改進與實戰案例專欄 介紹 摘要 文…

如何將照片從POCO手機傳輸到Mac電腦

將照片從POCO手機傳輸到Mac電腦可能會有些困難,因為與iPhone不同,POCO設備沒有原生的macOS支持。這常常讓用戶尋找簡單、有效的方法來移動圖片,同時避免丟失質量,節省時間,并避免復雜的軟件設置。如果你想知道如何將照…