日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

【opencv】(1) 基础操作:图像视频读取、图像截取、颜色通道

發布時間:2023/11/27 生活经验 50 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【opencv】(1) 基础操作:图像视频读取、图像截取、颜色通道 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

主要內容有:圖像及視頻的讀取和保存圖像顯示轉換灰度圖圖像截取顏色通道提取和組合

那我們開始吧。


1. 圖像操作

首先我們導入opencv庫,彩色圖像一般都是由RGB(紅綠藍)三顏色通道構成,灰度圖只有一個顏色通道即暗亮度。在opencv中,圖像的讀取格式是BGR;在matplot中,圖像保存格式是RGB。用opencv的繪圖方法和matplot的繪圖方法展現出來的圖可能會有顏色上的出入,這需要注意一下。

import cv2  # 導入opencv,讀取的格式是BGR

1.1 圖像讀取和顯示

圖像讀取: cv2.imread( 圖片路徑 )

圖像顯示:?cv2.imshow( '定義圖像名', 圖像 )

首先,讀取圖片時,文件的路徑名一定要是英文的,不然可能會讀取不了。

#(1)圖像讀取,注意是英文路徑
filepath = 'C:\\...\\opencv\\img'
# 讀取img文件夾中的wise.jpg圖片
img = cv2.imread(filepath+'\\wise.jpg')
# 取值范圍0-255
img.shape  # (404, 720, 3)

讀取后,變量img中保存的是我們的圖片,每一個像素值都是在0-255之間,shape為3,即長404,寬720,顏色通道3。

接下來我們顯示這張圖象。其中 cv2.waitKey(0) 為顯示圖像后圖像不消失,需要手動關閉,如果設置圖像顯示幾毫秒后自動關閉,填入相應的值。cv2.destroyAllWindows()?代表點擊任意鍵關閉所有窗口。

#(2)顯示圖像
cv2.imshow('wise-man',img) # 傳入(窗口名,圖像)
# 等待時間設為0,讓圖像不會自己消失
cv2.waitKey(0)
# cv2.waitKey(1000)  # 圖像顯示1000毫秒后消失
# 鍵盤上任意按一個圖像消失
cv2.destroyAllWindows()

輸出圖像如下。


1.2 轉換灰度圖

方法: cv2.imread(路徑, cv2.IMREAD_GRAYSCALE)

轉換灰度圖只需要在讀取圖像函數中增加一個參數 cv2.IMREAD_GRAYSCALE,就能在讀取圖像時將圖像從彩圖轉變成灰度圖。

# 讀取圖像轉換灰度圖
img = cv2.imread(filepath+'\\wise.jpg',cv2.IMREAD_GRAYSCALE)
img.shape # 查看圖像的shape,灰度圖只有一個顏色通道
# 顯示圖像
cv2.imshow('wise-man',img) 
# 手動關閉窗口
cv2.waitKey(0)
cv2.destroyAllWindows()

輸出結果如下,可以和上圖的原圖比較


1.3 圖像保存

cv2.imwrite(路徑, 圖像變量)??

將圖像保存到指定文件夾filpath,再給這個圖片命名。執行代碼會有返回值,如果是True證明保存成功。

cv2.imwrite(filepath+'\\gray.jpg',img)  # 指定路徑,圖像

1.4 其他基礎操作

# 查看形狀
img.shape
# 查看數據類型
type(img)  # 數組類型
# 計算像素點個數
img.size  # 872640個
# 數據類型
img.dtype  #'uint8'

2. 視頻操作

2.1 視頻讀取

讀取方法: cv2.VideoCapture(文件路徑)

#(1)視頻讀取
# 視頻所在文件夾
filepath = 'C:\\...\\video'
# 讀取文件夾中的哪一個視頻
video = cv2.VideoCapture(filepath+'\\walking.mp4')

查看視頻能否被打開。變量.read() 從視頻中提取一幀圖片,需要循環來不斷提取。用right接收是否能打開,返回True表示可以打開frame保存返回的的每一幀圖像

#(2)檢查是否打開正確
if video.isOpened(): # 如果能打開
# 返回布爾類型,和每一幀數據right,frame = video.read()  # 每次執行讀取一幀結果
else:  # 如果不能打開open = False

2.2 讀取整個視頻

#(3)讀取整個視頻
while open:# 每一次循環讀取一幀,返回是否打開right和每幀圖像結果frameright,frame = video.read() # video存放讀入的視頻# 如果讀取的一幀是空值,說明讀取結束,循環停止if frame is None:breakif right == True:  # 對每一幀圖像處理# 圖像色彩轉換函數,將當前圖像變成灰度gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)# 處理后將每幀圖像依次呈現出來cv2.imshow('changed',gray)# 設置每幀圖像停留時間10ms,正常速度33ms,并指定退出鍵ESC退出視頻if cv2.waitKey(10)&0xFF==27:break
# 運行結束后,釋放視頻資源
video.release()
# 任意鍵退出
cv2.destroyAllWindows()

gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) 表示將幀圖片frame變成灰度圖。cv2.waitKey(10) 設置每張圖片的顯示時間10ms,0xFF==27代表使用ESC鍵退出視頻。


3. 圖像截取

為了下面顯示圖像方便,我們先定義一個圖像顯示函數。

import cv2
# 定義一個圖像展示函數
def cv_show(name,img):cv2.imshow(name,img)cv2.waitKey(0)cv2.destroyAllWindows()

接下來提取圖像,由于提取的圖像數據是數組類型,因此可以使用切片的方法來裁剪圖像。

# roi區域,截取圖像中的一部分
# 獲取指定路徑圖像
filepath = 'C:\\Users\\admin\\.spyder-py3\\test\\opencv\\img'
img = cv2.imread(filepath+'\\wise2.jpg')
# 展示讀入的圖像
cv_show('wise-man',img)
# 由于讀入的圖像是數組類型,可以進行切片
wise2 = img[200:700,200:700] 
# 展示切片后的圖像
cv_show('changed',wise2)

??


4. 顏色通道

4.1 提取三通道

通道拆分: cv2.split(圖像變量)

拆分后得到每一個通道的圖像,分別為B、G、R

# ==1== cv2.split()切分
B,G,R = cv2.split(img) # 對原圖像切分,把channel層分開

由于圖像是數組類型,使用索引方法切分通道

# ==2== 使用索引方法,提取三通道
B = img[:,:,0] # 通道的第0個是B
G = img[:,:,1]
R = img[:,:,2]

4.2 顏色通道組合

通道組合:?cv2.merge(通道層)

#(3)顏色通道組合
img2 = cv2.merge((B,G,R))
# 使用定義的函數繪圖
cv_show('merged',img2)

??

4.3?只保留某個通道

使用索引方法使其他幾個通道為0即可

#(4)只保留某個通道
# 首先復制一張圖像
img3 = img.copy() # 復制img
# 只保留G通道
img3[:,:,0] = 0  # B通道為0
img3[:,:,2] = 0  # R通道為0
# 使用定義的函數
cv_show('G-channel',img3)
# 效果圖上面的右邊

總結

以上是生活随笔為你收集整理的【opencv】(1) 基础操作:图像视频读取、图像截取、颜色通道的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。