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

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

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

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

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

參數說明:

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

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

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

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

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

可以用 namedWindow(window_name, flag)來定義一個窗口,如果沒有定義會根據 imshow 的參數自動生成一個窗口。已經定義的窗口可以用 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來顯示圖片

注意需要在顯示的時候進行圖片通道翻轉(直接用::-1,也可以用cvtColor()函數進行顏色通道翻轉),否則顯示的圖片顏色會異常,因為正常圖片的格式是RGB,但是opencv讀取進來的格式是BGR。

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

4 opencv中圖像的屬性

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

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

5 圖片保存 imwrite(filename,img)

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

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

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)  #該函數的返回值為ASCII碼,參數0表示:等待 0 毫秒后,用戶可以通過按鍵盤上的任意鍵來銷毀所有窗口。
    if key == ord('q'): #如果鍵盤輸入q,退出
        break
    elif key == ord('s'):  #如果鍵盤輸入s,保存圖片到 當前文件夾下, ord()是把輸入的字符轉換為對應的ASCII碼。
        cv2.imwrite('./mycat.png',img)
    else:
        print(key)
cv2.destroyAllWindows()  #銷毀當前所有窗口

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

6 圖像編碼 imencode(ext,img)

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

圖像編碼后保存在文件中,這里涉及到文件的讀寫操作,Python內置了讀寫文件的函數 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')  #文件的寫操作

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

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

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

7 圖像解碼 imdecode(buf, flags)

參數說明:buf: bytes類型的輸入數據流,flags: 解碼標志,由ImreadModes定義,常用的有IMREAD_GRAYSCALE, IMREAD_COLOR 。

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

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

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

相關文章

  • python實現百度關鍵詞排名查詢

    python實現百度關鍵詞排名查詢

    這篇文章主要介紹了python實現百度關鍵詞排名查詢,需要的朋友可以參考下
    2014-03-03
  • 對pytorch中x = x.view(x.size(0), -1) 的理解說明

    對pytorch中x = x.view(x.size(0), -1) 的理解說明

    這篇文章主要介紹了對pytorch中x = x.view(x.size(0), -1) 的理解說明,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • pandas中DataFrame的merge操作的實現

    pandas中DataFrame的merge操作的實現

    本文主要介紹了pandas中DataFrame的merge操作的實現,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2024-07-07
  • python集合的創(chuàng)建、添加及刪除操作示例

    python集合的創(chuàng)建、添加及刪除操作示例

    這篇文章主要介紹了python集合的創(chuàng)建、添加及刪除操作,結合實例形式分析了Python集合的概念、功能及針對集合的創(chuàng)建、添加與刪除等相關操作實現技巧,需要的朋友可以參考下
    2019-10-10
  • Python如何實現PDF隱私信息檢測

    Python如何實現PDF隱私信息檢測

    隨著越來越多的個人信息以電子形式存儲和傳輸,確保這些信息的安全至關重要,本文將介紹如何使用Python檢測PDF文件中的隱私信息,需要的可以參考下
    2025-02-02
  • python3 實現爬取TOP500的音樂信息并存儲到mongoDB數據庫中

    python3 實現爬取TOP500的音樂信息并存儲到mongoDB數據庫中

    今天小編就為大家分享一篇python3 實現爬取TOP500的音樂信息并存儲到mongoDB數據庫中,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-08-08
  • 通過Python模塊filecmp 對文件比較的實現方法

    通過Python模塊filecmp 對文件比較的實現方法

    這篇文章主要介紹了通過Python模塊filecmp 對文件比較的實現方法,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-06-06
  • 利用Python實現K-Means聚類的方法實例(案例:用戶分類)

    利用Python實現K-Means聚類的方法實例(案例:用戶分類)

    k-means是發(fā)現給定數據集的k個簇的算法,也就是將數據集聚合為k類的算法,下面這篇文章主要給大家介紹了關于利用Python實現K-Means聚類的相關資料,需要的朋友可以參考下
    2022-05-05
  • python基于pdfminer庫提取pdf文字代碼實例

    python基于pdfminer庫提取pdf文字代碼實例

    這篇文章主要介紹了python 提取pdf文字代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-08-08
  • PyTorch 遷移學習實戰(zhàn)

    PyTorch 遷移學習實戰(zhàn)

    本文主要介紹了PyTorch 遷移學習實戰(zhàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-01-01

最新評論