【opencv系列02】OpenCV4.X圖像讀取與顯示


一、讀取圖片

opencv中采用imread() 函數讀取圖像

imread(filename, flags=None)
    filename 圖片的路徑
    flags 圖像讀取方式

  • cv2.IMREAD_COLOR : 加載彩色圖像, 圖像的任何透明度都將被忽略(默認)。
  • cv2.IMREAD_GRAYSCALE : 以灰度模式加載圖像。
  • cv2.IMREAD_UNCHANGED : 加載包含Alpha通道的圖像。
    也可以使用1, 0 or -1代替,源碼中,IMREAD_COLOR = 1,IMREAD_GRAYSCALE = 0,IMREAD_UNCHANGED = -1。

NOTE

  1. 圖像數據以B,G,R的順序存儲。
  2. 讀取的圖像像素值范圍:【0,255】。
  3. 圖片路徑錯誤時,程序不報錯,返回值為None,顯示操作時會報:error: (-215:Assertion failed) size.width>0 && size.height>0 in function 'cv::imshow'。
  4. 圖片路徑中不能包含中文,否則報同2一樣的錯誤。

代碼

import cv2
img = cv2.imread('test.jpg',1)

二、顯示圖片

使用imshow()函數進行圖像顯示。
imshow(winname, mat)
    winname 顯示窗口的名字
    mat 要顯示的圖像數據
這里需要使用一些輔助函數,首先,在顯示圖像前和顯示后,需要創建和銷毀窗口,分別使用函數namedWindow()destroyAllWindows()
namedWindow(winname, flags=None)
    winname顯示窗口的名字
    flags顯示窗口的標志

  • cv2.WINDOW_AUTOSIZE : 根據顯示圖像自動調整窗口,不能手動更改窗口大小(默認) 。
  • cv2.WINDOW_NORMAL : 可以調整窗口大小。

destroyAllWindows() 銷毀創建的所有窗口。

其次,需要使用一個等待鍵盤輸入的函數waitKey()以保證窗口處於顯示狀態,否則窗口會一閃而過。
waitKey(delay=None)
    delay以毫秒為單位延遲, 0是指“永遠”的特殊值。

NOTE

  1. 顯示失敗,可通過print(mat)判斷顯示的圖像數據是否為None。
  2. 窗口名winname相同時,窗口只會顯示最新新圖像。

代碼

cv2.namedWindow('image', cv2.WINDOW_NORMAL) # 可省略
cv2.imshow("image",img)
cv2.waitKey(0)
cv2.destroyAllWindows()

三、保存圖片

圖片保存通過imwrite()函數完成。
imwrite(filename, img, params=None)
    filename 保存的圖像名稱
    img 保存的圖像數據
    params 對於JPEG,其表示的是圖像的質量,用0 - 100的整數表示,默認95;對於png ,第 三個參數表示的是壓縮級別。默認為3。

代碼

cv2.imwrite('test.jpg', img)

四、應用

1. 顯示保存圖片

加載一幅灰度圖像,顯示它,如果按's'則保存圖像並退出,如果按ESC鍵直接退出。

代碼

import cv2

img = cv2.imread('landscape.jpg', 0)
cv2.imshow('image', img)
k = cv2.waitKey(0)
if k == 27:         # wait for ESC key to exit
    cv2.destroyAllWindows()
elif k == ord('s'): # wait for 's' key to save and exit
    cv2.imwrite('gray.png', img)
    cv2.destroyAllWindows()

2. 使用Matplotlib

Matplotlib是python的一個繪圖庫,提供了大量的圖形繪制API。下面,通過Matplotlib展示opencv讀取的圖像、放大圖像和保存圖像。

代碼

import cv2
from matplotlib import pyplot as plt

img = cv2.imread('landscape.jpg', 0)
plt.imshow(img, cmap = 'gray', interpolation = 'bicubic')
plt.xticks([]), plt.yticks([])  # to hide tick values on X and Y axis
plt.show()


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM