1. 程式人生 > >Python-OpenCV:cv2.imread(),cv2.imshow(),cv2.imwrite()

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

為什麼使用Python-OpenCV

雖然python 很強大,而且也有自己的影象處理庫PIL,但是相對於OpenCV 來講,它還是弱小很多。跟很多開源軟體一樣OpenCV 也提供了完善的python 介面,非常便於呼叫。OpenCV 的穩定版是2.4.8,最新版是3.0,包含了超過2500 個演算法和函式,幾乎任何一個能想到的成熟演算法都可以通過呼叫OpenCV 的函式來實現,超級方便。

一、需要工具

本機使用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()

參考:https://blog.csdn.net/Eddy_zheng/article/details/48286735

         https://blog.csdn.net/djcxym/article/details/52097812