Python-OpenCV:cv2.imread(),cv2.imshow(),cv2.imwrite()

於小勇發表於2020-12-17

 一、需要工具

本機使用python 2.7.10下除錯程式碼均通過,一下學習需要有一定的程式碼閱讀能力,一下學習只介紹函式方法:

Python 作為一種高效簡潔的直譯式語言非常適合我們用來解決日常工作的問題。而且它簡單易學,初學者幾個小時就可以基本入門。再加上Numpy 和matplotlib 這兩個翅膀,Python 對資料分析的能力不遜於Matlab。Python 還被稱為是膠水語言,有很多軟體都提供了Python 介面。尤其是在linux 下,可以使用Python 將不同的軟體組成一個工作流,發揮每一個軟體自己最大的優勢從而完成一個複雜的任務。比如我們可以使用Mysql 儲存資料,使用R 分析資料,使用matplotlib 展示資料,使用OpenGL 進行3D 建模,使用Qt 構建漂亮的GUI。而Python 可以將他們聯合在一起構建一個強大的工作流。

二、入門小試

1、影像讀入:cv2.imread()

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

• cv2.IMREAD_COLOR:讀入一副彩色影像。影像的透明度會被忽略, 
這是預設引數。 

• cv2.IMREAD_GRAYSCALE:以灰度模式讀入影像

import cv2

img = cv2.imread('lena.jpg',0)

PS:呼叫opencv,就算影像的路徑是錯的,OpenCV 也不會提醒你的,但是當你使用命 
令print img時得到的結果是None。

2、顯示影像cv2.imshow()

使用函式cv2.imshow() 顯示影像。視窗會自動調整為影像大小。第一個引數是視窗的名字,其次才是我們的影像。你可以建立多個視窗,只要你喜歡,但是必須給他們不同的名字。

cv2.imshow('image',img)

cv2.waitKey(0)

3、儲存影像cv2.imwrite()

cv2.imwrite('lena.png',img)
  • 這裡寫圖片描述

==========================

 

使用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 npimport cv2img = cv2.imread('1.jpg',cv2.IMREAD_GRAYSCALE)

二、顯示影像

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

  • cv2.imshow('image',img)
  • cv2.waitKey(0)
  • cv2.destroyAllWindows()#dv2.destroyWindow(wname)
  • 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、使用函式cv2.flip(img,flipcode)翻轉影像,flipcode控制翻轉效果。

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

2、複製影像

imgcopy = img.copy()
  •  

3、顏色空間轉換

#彩色影像轉為灰度影像

img2 = cv2.cvtColor(img,cv2.COLOR_RGB2GRAY)

灰度影像轉為彩色影像img3 = cv2.cvtColor(img,cv2.COLOR_GRAY2RGB)

  •  

示例

讀入一副影像,按’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()