欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

opencv-python圖像讀寫模塊示例詳解

 更新時間:2023年07月06日 08:40:49   作者:寒水浮云  
這篇文章主要介紹了opencv-python圖像讀寫模塊,本文結(jié)合示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下

這個分類記錄自己學(xué)習(xí)opencv的隨筆文檔,方便以后查詢和復(fù)習(xí)。python-opencv環(huán)境配置網(wǎng)上教程很多,此處就不做贅述了,該文檔記錄opencv最基礎(chǔ)的圖像讀寫和顯示,以及圖像編碼解碼,工具是jupyter notebook。

1 opencv中,圖像讀取函數(shù)是 imread(filename, flags=None)

參數(shù)說明:

filename:讀取圖像的路徑,通常支持jpg、png、bmp、tiff等格式文件。

flags:圖片讀入的模式,模式定義在cv::ImreadModels中,默認(rèn)值為IMREAD_COLOR。還有一個常用的模式是:IMREAD_GRAYSCALE,對應(yīng)值為 0,以灰度圖方式讀取圖片。

注意:imread函數(shù)返回一個BGR形式的圖像對象,其類型為一個numpy數(shù)組。

2 顯示圖像的函數(shù)是 imshow(window_name, image)

參數(shù)說明:window_name是一個字符串,代表要在其中顯示圖像的窗口的名稱。image是它是要顯示的圖像。

可以用 namedWindow(window_name, flag)來定義一個窗口,如果沒有定義會根據(jù) imshow 的參數(shù)自動生成一個窗口。已經(jīng)定義的窗口可以用 resizeWindow(window_name,width,height) 來改變窗口大小。

import cv2  
import numpy as np
img=cv2.imread('C:/Users/86188/Desktop/test/python/cat.jpg',cv2.IMREAD_COLOR)  #讀取圖片<br>
cv2.imshow('showimg',img) #顯示圖片
cv2.waitKey(0)           #等待用戶操作
cv2.destroyWindow('window') #銷毀窗口

3 除了直接用opencv的imshow來顯示圖片,也可以用matplotlib來顯示圖片

注意需要在顯示的時候進(jìn)行圖片通道翻轉(zhuǎn)(直接用::-1,也可以用cvtColor()函數(shù)進(jìn)行顏色通道翻轉(zhuǎn)),否則顯示的圖片顏色會異常,因?yàn)檎D片的格式是RGB,但是opencv讀取進(jìn)來的格式是BGR。

用opencv來顯示圖像通常需要好幾行代碼,可以自己封裝成函數(shù),需要的時候直接調(diào)用:

4 opencv中圖像的屬性

在OpenCV中,圖像是一個NumPy數(shù)組,我們可以使用numpy數(shù)組的屬性來訪問圖像屬性:

  • 圖像類型- 圖像的數(shù)據(jù)結(jié)構(gòu)。OpenCV中的圖像是numpy.ndarray,我們可以將其訪問為type(img)。
  • 圖像形狀- 它是以[H, W, C]格式表示的形狀。其中H,W和C分別是圖像的高度,寬度和通道數(shù) ,我們可以將其訪問為img.shape。
  • 圖像大小- 它是圖像中像素的總數(shù)。它也是數(shù)組中元素的總數(shù)。我們可以將其訪問為img.size。
  • 數(shù)據(jù)類型- 它是圖像數(shù)組元素的dtype。我們可以將其訪問為img.dtype。

5 圖片保存 imwrite(filename,img)

參數(shù)說明: filename 表示保存的文件名稱,img 是需要保存的圖像對象。

創(chuàng)建窗口,讀取顯示和保存圖像的實(shí)例如下:

import cv2
#創(chuàng)建窗口
cv2.namedWindow('img',cv2.WINDOW_NORMAL)
cv2.resizeWindow('img',640,480)
#讀取圖片
img = cv2.imread('./cat.jpg')
while True:
    cv2.imshow('img',img)
    key = cv2.waitKey(0)  #該函數(shù)的返回值為ASCII碼,參數(shù)0表示:等待 0 毫秒后,用戶可以通過按鍵盤上的任意鍵來銷毀所有窗口。
    if key == ord('q'): #如果鍵盤輸入q,退出
        break
    elif key == ord('s'):  #如果鍵盤輸入s,保存圖片到 當(dāng)前文件夾下, ord()是把輸入的字符轉(zhuǎn)換為對應(yīng)的ASCII碼。
        cv2.imwrite('./mycat.png',img)
    else:
        print(key)
cv2.destroyAllWindows()  #銷毀當(dāng)前所有窗口

 此外,opencv中也可以進(jìn)行多幅圖像的讀取,函數(shù)是 imreadmulti(filename) 參數(shù)filename是待讀取的圖像文件路徑,返回的結(jié)果是tuple類型,包含兩個值,第一個為bool類型,表示是否讀取成功;第二個參數(shù)是list類型,保存讀取的圖像結(jié)果。多幅圖像保存可以用imwritemulti(filename,img) .參數(shù)filename表示保存的圖像文件名稱,img是圖像數(shù)據(jù)。

6 圖像編碼 imencode(ext,img)

參數(shù)說明:ext: 文件擴(kuò)展名,用來決定輸出格式。img: 待編碼圖像數(shù)據(jù)。

圖像編碼后保存在文件中,這里涉及到文件的讀寫操作,Python內(nèi)置了讀寫文件的函數(shù) with open語句。常用的讀寫操作如下:

with open('filename.txt', 'r') as f:
   content = f.read(f)  #文件的讀操作<br>
with open('data.txt', 'w') as f:
   f.write('hello world')  #文件的寫操作

下面將讀取的圖像進(jìn)行編碼,然后保存到txt文件中(編碼后要把數(shù)據(jù)轉(zhuǎn)換為二進(jìn)制)。

import cv2   #圖像編碼為數(shù)據(jù)流,方便網(wǎng)絡(luò)傳輸
import numpy as np
img = cv2.imread('cat.jpg')
ret,img_encode = cv2.imencode(' .jpg',img) #圖像編碼,返回值ret為bool類型,img_encode為返回的數(shù)據(jù)流,ndarray格式
print(type(img_encode)) 
bytes_encode = img_encode.tobytes() #把編碼的數(shù)據(jù)類型轉(zhuǎn)換為bytes二進(jìn)制
print(type(bytes_encode))
with open("imencode.txt","wb") as f: #以二進(jìn)制格式打開一個文件只用于寫入。如果該文件已存在則將其覆蓋。如果該文件不存在,創(chuàng)建新文件。
    f.write(bytes_encode)            # 把數(shù)據(jù)存儲到文本中

執(zhí)行完成后,會在當(dāng)前路徑下生成imencode.txt文件,其中保存著編碼后的圖像數(shù)據(jù)。但是文本打開沒法正常顯示二進(jìn)制,會亂碼。

7 圖像解碼 imdecode(buf, flags)

參數(shù)說明:buf: bytes類型的輸入數(shù)據(jù)流,flags: 解碼標(biāo)志,由ImreadModes定義,常用的有IMREAD_GRAYSCALE, IMREAD_COLOR 。

下面從剛才保存的txt文件中讀取圖像數(shù)據(jù)流,然后將數(shù)據(jù)流解碼為圖像顯示(要把讀取的數(shù)據(jù)流轉(zhuǎn)換為ndarray格式再進(jìn)行解碼)。

import cv2       #圖像解碼
import numpy as np
with open('imencode.txt','rb') as f: #以二進(jìn)制格式打開一個文件用于只讀。文件指針將會放在文件的開頭。這是默認(rèn)模式。
    data_encode = f.read()            #從文件中讀取圖像數(shù)據(jù)
img_array = np.frombuffer(data_encode,dtype=np.uint8)  # 把讀取的數(shù)據(jù)流轉(zhuǎn)換為ndarray(數(shù)組)格式
img_decode = cv2.imdecode(img_array,cv2.IMREAD_COLOR) #圖像解碼
cv2.imshow('img_decode',img_decode)
cv2.waitKey(0)
cv2.destroyAllWindows()

到此這篇關(guān)于opencv-python圖像讀寫模塊的文章就介紹到這了,更多相關(guān)opencv-python圖像讀寫內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論