天天看點

opencv-python 4.圖檔

目标

  • 在這裡你将學會怎樣讀入一幅圖像,怎樣顯示一幅圖像,以及如何儲存一幅圖像
  • 你将要學習如下函數:cv2.imread(),cv2.imshow(),cv2.imwrite()
  • 如何使用Matplotlib 顯示一幅圖檔

4.1 讀入圖像

cv2.imread()讀入圖像。這幅圖像應該在此程式的工作路徑,或者給函數提供完整路徑,第二個參數是要告訴函數應該如何讀取這幅圖檔。

  • cv2.IMREAD_COLOR:讀入一副彩色圖像。圖像的透明度會被忽略,

    這是預設參數。

  • cv2.IMREAD_GRAYSCALE:以灰階模式讀入圖像
  • cv2.IMREAD_UNCHANGED:讀入一幅圖像,并且包括圖像的alpha 通道

注意

除了這三個标志,你可以分别簡單地傳遞整數1、0或-1。

import cv2 as cv

src = cv.imread("I:/images/Animation/17.jpg", 0)
src1 = cv.imread("I:/images/Animation/17.jpg", cv.IMREAD_COLOR)
src2 = cv.imread("I:/images/Animation/17.jpg", cv.IMREAD_GRAYSCALE)
src3 = cv.imread("I:/images/Animation/17.jpg", cv.IMREAD_UNCHANGED)
cv.imshow('image', src)
cv.imshow('image1', src1)
cv.imshow('image2', src2)
cv.imshow('image3', src3)
cv.waitKey(0)
cv.destroyAllWindows()
           

結果

opencv-python 4.圖檔

警告:就算圖像的路徑是錯的,OpenCV 也不會提醒你的,但是當你使用指令print img時得到的結果是None。

4.2 顯示圖像

使用函數cv2.imshow() 顯示圖像。視窗會自動調整為圖像大小。

第一個參數是視窗的名字,其次才是我們的圖像。

你可以建立多個視窗,隻要你喜歡,但是必須給他們不同的名字

上面的例子中:

cv2.waitKey() 是一個鍵盤綁定函數。需要指出的是它的時間尺度是毫秒級。函數等待特定的幾毫秒,看是否有鍵盤輸入。特定的幾毫秒之内,如果按下任意鍵,這個函數會傳回按鍵的ASCII碼值,程式将會繼續運作。如果沒有鍵盤輸入,傳回值為-1,如果我們設定這個函數的參數為0,那它将會無限期的等待鍵盤輸入。它也可以被用來檢測特定鍵是否被按下,例如按鍵a是否被按下,這個後面我們會接着讨論。

cv2.destroyAllWindows() 可以輕易删除任何我們建立的視窗。如果你想删除特定的視窗可以使用 cv2.destroyWindow(),在括号内輸入你想删除的視窗名。

建議:一種特殊的情況是, 你也可以先建立一個視窗, 之後再加載圖像。這種情況下, 你可以決定視窗是否可以調整大小。使用到的函數是cv2.namedWindow()。初始設定函數标簽是cv2.WINDOW_AUTOSIZE。但是如果你把标簽改成cv2.WINDOW_NORMAL,你就可以調整視窗大小了。當圖像次元太大,或者要添加軌迹條時,調整視窗大小将會很有用

代碼:

import cv2 as cv

src = cv.imread("I:/images/Animation/16.jpg", 0)
cv.namedWindow('image', cv.WINDOW_NORMAL)
cv.imshow('image', src)
cv.waitKey(0)
cv.destroyAllWindows()

           
opencv-python 4.圖檔

4.3 儲存圖像

使用函數cv2.imwrite() 來儲存一個圖像。首先需要一個檔案名,之後才

是你要儲存的圖像。

import cv2 as cv

src = cv.imread("I:/images/Animation/16.jpg", 0)
cv.imwrite('messigray.png',src)
cv.destroyAllWindows()

           

結果

opencv-python 4.圖檔
opencv-python 4.圖檔

總結

下面的程式将會加載一個灰階圖,顯示圖檔,按下’s’鍵儲存後退出,或者按下ESC 鍵退出不儲存。

import cv2 as cv

src = cv.imread("I:/images/Animation/16.jpg", 0)
cv.imshow('image', src)
k=cv.waitKey(0)
if k == 27:         # wait for ESC key to exit
    cv.destroyAllWindows()
elif k == ord('s'): #wait for 's' key to save and exit
    cv.imwrite('messigray.png',src)
    cv.destroyAllWindows()


           

使用Matplotlib

Matplotib 是python 的一個繪圖庫,裡頭有各種各樣的繪圖方法。之後會陸續了解到。現在,你可以學習怎樣用Matplotib 顯示圖像。你可以放大圖像,儲存它等等。

import cv2 as cv
from matplotlib import pyplot as plt

src = cv.imread("I:/images/Animation/16.jpg", 0)
plt.imshow(src, cmap='gray', interpolation='bicubic')
plt.xticks([]), plt.yticks([])   #to hide tick values on X and Y axis
plt.show()

           

結果:

opencv-python 4.圖檔

注意:彩色圖像使用OpenCV 加載時是BGR 模式。但是Matplotib 是RGB模式。是以彩色圖像如果已經被OpenCV 讀取,那它将不會被Matplotib 正确顯示。

做了點筆記

搬運自OpenCV-Python-Tutorial-中文版pdf 段力輝 譯

繼續閱讀