1. 程式人生 > >openCV+python影象的讀取、顯示和儲存

openCV+python影象的讀取、顯示和儲存

使用cv2.imread(),cv2.imshow(),cv2.imwrite()讀取、顯示和儲存影象

一、讀入影象

使用函式cv2.imread(filepath,flags)讀入一副圖片

  • filepath:要讀入圖片的完整路徑
  • flags:讀入圖片的標誌
    • cv2.IMREAD_COLOR:預設引數,讀入一副彩色圖片,忽略alpha通道
    • cv2.IMREAD_GRAYSCALE:讀入灰度圖片
    • cv2.IMREAD_UNCHANGED:顧名思義,讀入完整圖片,包括alpha通道
import numpy as np
import cv2
img = cv2.imread('1.jpg',cv2.IMREAD_GRAYSCALE)
  • 1
  • 2
  • 3

二、顯示影象

使用函式cv2.imshow(wname,img)顯示影象,第一個引數是顯示影象的視窗的名字,第二個引數是要顯示的影象(imread讀入的影象),視窗大小自動調整為圖片大小

cv2.imshow('image',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
#dv2.destroyWindow(wname)
  • 1
  • 2
  • 3
  • 4
  • cv2.waitKey顧名思義等待鍵盤輸入,單位為毫秒,即等待指定的毫秒數看是否有鍵盤輸入,若在等待時間內按下任意鍵則返回按鍵的ASCII碼,程式繼續執行。若沒有按下任何鍵,超時後返回-1。引數為0表示無限等待。不呼叫waitKey的話,視窗會一閃而逝,看不到顯示的圖片。
  • cv2.destroyAllWindow()銷燬所有視窗
  • cv2.destroyWindow(wname)銷燬指定視窗

三、儲存影象

使用函式cv2.imwrite(file,img,num)儲存一個影象。第一個引數是要儲存的檔名,第二個引數是要儲存的影象。可選的第三個引數,它針對特定的格式:對於JPEG,其表示的是影象的質量,用0 - 100的整數表示,預設95;對於png ,第三個引數表示的是壓縮級別。預設為3.

注意:

  • cv2.IMWRITE_JPEG_QUALITY型別為 long ,必須轉換成 int
  • cv2.IMWRITE_PNG_COMPRESSION, 從0到9 壓縮級別越高影象越小。
cv2.imwrite('1.png',img, [int( cv2.IMWRITE_JPEG_QUALITY), 95])
cv2.imwrite('1.png',img, [int(cv2.IMWRITE_PNG_COMPRESSION), 9])
  • 1
  • 2

四、圖片操作

1、使用函式cv2.flip(img,flipcode)翻轉影象,flipcode控制翻轉效果。

  • flipcode = 0:沿x軸翻轉
  • flipcode > 0:沿y軸翻轉
  • flipcode < 0:x,y軸同時翻轉
imgflip = cv2.flip(img,1)
  • 1

2、複製影象

imgcopy = img.copy()
  • 1

3、顏色空間轉換

#彩色影象轉為灰度影象
img2 = cv2.cvtColor(img,cv2.COLOR_RGB2GRAY) 
#灰度影象轉為彩色影象
img3 = cv2.cvtColor(img,cv2.COLOR_GRAY2RGB)
# cv2.COLOR_X2Y,其中X,Y = RGB, BGR, GRAY, HSV, YCrCb, XYZ, Lab, Luv, HLS
  • 1
  • 2
  • 3
  • 4
  • 5

示例

讀入一副影象,按’s’鍵儲存後退出,其它任意鍵則直接退出不儲存

import numpy as np
import cv2
img = cv2.imread('1.jpg',cv2.IMREAD_UNCHANGED)
cv2.imshow('image',img)
k = cv2.waitKey(0)
if k == ord('s'): # wait for 's' key to save and exit
    cv2.imwrite('1.png',img)
    cv2.destroyAllWindows()
else: 
    cv2.destroyAllWindows()