中國人的籍貫是填中國嗎(籍貫填寫中國嗎)
2022-12-03
更新時間:2022-11-30 15:08:41作者:佚名
1. 圖像操作首先我們導(dǎo)入opencv庫,彩色圖像一般都是由RGB(紅綠藍(lán))三顏色通道構(gòu)成,灰度圖只有一個顏色通道即暗亮度。在opencv中,圖像的讀取格式是BGR;在matplot中,圖像保存格式是RGB。用opencv的繪圖方法和matplot的繪圖方法展現(xiàn)出來的圖可能會有顏色上的出入,這需要注意一下。
import cv2 # 導(dǎo)入opencv,讀取的格式是BGR1.1 圖像讀取和顯示
圖像讀?。?cv2.imread( 圖片路徑 )
圖像顯示: cv2.imshow( '定義圖像名', 圖像 )
首先,讀取圖片時,文件的路徑名一定要是英文的,不然可能會讀取不了。
#(1)圖像讀取,注意是英文路徑filepath = 'C:\\...\\opencv\\img'# 讀取img文件夾中的wise.jpg圖片img = cv2.imread(filepath+'\\wise.jpg')# 取值范圍0-255img.shape # (404, 720, 3)讀取后,變量img中保存的是我們的圖片,每一個像素值都是在0-255之間,shape為3,即長404,寬720,顏色通道3。
接下來我們顯示這張圖象。其中 cv2.waitKey(0) 為顯示圖像后圖像不消失,需要手動關(guān)閉,如果設(shè)置圖像顯示幾毫秒后自動關(guān)閉,填入相應(yīng)的值。cv2.destroyAllWindows() 代表點(diǎn)擊任意鍵關(guān)閉所有窗口。
#(2)顯示圖像cv2.imshow('wise-man',img) # 傳入(窗口名,圖像)# 等待時間設(shè)為0,讓圖像不會自己消失cv2.waitKey(0)# cv2.waitKey(1000) # 圖像顯示1000毫秒后消失# 鍵盤上任意按一個圖像消失cv2.destroyAllWindows()輸出圖像如下。
1.2 轉(zhuǎn)換灰度圖
方法: cv2.imread(路徑, cv2.IMREAD_GRAYSCALE)
轉(zhuǎn)換灰度圖只需要在讀取圖像函數(shù)中增加一個參數(shù) cv2.IMREAD_GRAYSCALE,就能在讀取圖像時將圖像從彩圖轉(zhuǎn)變成灰度圖。
# 讀取圖像轉(zhuǎn)換灰度圖img = cv2.imread(filepath+'\\wise.jpg',cv2.IMREAD_GRAYSCALE)img.shape # 查看圖像的shape,灰度圖只有一個顏色通道# 顯示圖像cv2.imshow('wise-man',img) # 手動關(guān)閉窗口cv2.waitKey(0)cv2.destroyAllWindows()輸出結(jié)果如下,可以和上圖的原圖比較
1.3 圖像保存
cv2.imwrite(路徑, 圖像變量)
將圖像保存到指定文件夾filpath,再給這個圖片命名。執(zhí)行代碼會有返回值,如果是True證明保存成功。
cv2.imwrite(filepath+'\\gray.jpg',img) # 指定路徑,圖像1.4 其他基礎(chǔ)操作
# 查看形狀img.shape# 查看數(shù)據(jù)類型type(img) # 數(shù)組類型# 計(jì)算像素點(diǎn)個數(shù)img.size # 872640個# 數(shù)據(jù)類型img.dtype #'uint8'2. 視頻操作2.1 視頻讀取
讀取方法: cv2.VideoCapture(文件路徑)
#(1)視頻讀取# 視頻所在文件夾filepath = 'C:\\...\\video'# 讀取文件夾中的哪一個視頻video = cv2.VideoCapture(filepath+'\\walking.mp4')查看視頻能否被打開。變量.read() 從視頻中提取一幀圖片,需要循環(huán)來不斷提取。用right接收是否能打開,返回True表示可以打開。frame保存返回的的每一幀圖像。
#(2)檢查是否打開正確if video.isOpened(): # 如果能打開# 返回布爾類型,和每一幀數(shù)據(jù) right,frame = video.read() # 每次執(zhí)行讀取一幀結(jié)果else: # 如果不能打開 open = False2.2 讀取整個視頻
#(3)讀取整個視頻while open: # 每一次循環(huán)讀取一幀,返回是否打開right和每幀圖像結(jié)果frame right,frame = video.read() # video存放讀入的視頻 # 如果讀取的一幀是空值,說明讀取結(jié)束,循環(huán)停止 if frame is None: break if right == True: # 對每一幀圖像處理 # 圖像色彩轉(zhuǎn)換函數(shù),將當(dāng)前圖像變成灰度 gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) # 處理后將每幀圖像依次呈現(xiàn)出來 cv2.imshow('changed',gray) # 設(shè)置每幀圖像停留時間10ms,正常速度33ms,并指定退出鍵ESC退出視頻 if cv2.waitKey(10)&0xFF==27: break# 運(yùn)行結(jié)束后,釋放視頻資源video.release()# 任意鍵退出cv2.destroyAllWindows()gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) 表示將幀圖片frame變成灰度圖。cv2.waitKey(10) 設(shè)置每張圖片的顯示時間10ms,0xFF==27代表使用ESC鍵退出視頻。
3. 圖像截取為了下面顯示圖像方便,我們先定義一個圖像顯示函數(shù)。
import cv2# 定義一個圖像展示函數(shù)def cv_show(name,img): cv2.imshow(name,img) cv2.waitKey(0) cv2.destroyAllWindows()接下來提取圖像,由于提取的圖像數(shù)據(jù)是數(shù)組類型,因此可以使用切片的方法來裁剪圖像。
# roi區(qū)域,截取圖像中的一部分# 獲取指定路徑圖像filepath = 'C:\\Users\\admin\\.spyder-py3\\test\\opencv\\img'img = cv2.imread(filepath+'\\wise2.jpg')# 展示讀入的圖像cv_show('wise-man',img)# 由于讀入的圖像是數(shù)組類型,可以進(jìn)行切片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層分開由于圖像是數(shù)組類型,使用索引方法切分通道
# ==2== 使用索引方法,提取三通道B = img<:,:,0> # 通道的第0個是BG = img<:,:,1>R = img<:,:,2>4.2 顏色通道組合
通道組合: cv2.merge(通道層)
#(3)顏色通道組合img2 = cv2.merge((B,G,R))# 使用定義的函數(shù)繪圖cv_show('merged',img2)
4.3 只保留某個通道
使用索引方法使其他幾個通道為0即可
#(4)只保留某個通道# 首先復(fù)制一張圖像img3 = img.copy() # 復(fù)制img# 只保留G通道img3<:,:,0> = 0 # B通道為0img3<:,:,2> = 0 # R通道為0# 使用定義的函數(shù)cv_show('G-channel',img3)# 效果圖上面的右邊