OpenCV-Python——圖片的加載镐躲、顯示储玫、保存

OpenCV-Python——圖片的加載、顯示萤皂、保存

本小節(jié)撒穷,我們將學習在Python語言中利用OpenCV庫來實現(xiàn)圖片的讀取、顯示敌蚜、保存,所有的這些圖片都是一個numpy.ndarray窝爪,這三種操作都過cv2.imread()弛车、cv2.imshow()、cv2.imwrite()三個函數(shù)來實現(xiàn)蒲每,同時在文末纷跛,簡要介紹了使用Matplotlib來顯示圖片。本文所使用opencv為opencv3.2版本邀杏,圖片如下:

messi5.jpg

1. 讀取圖片

在OpenCV中使用cv2.imread()函數(shù)來加載圖片贫奠,該函數(shù)的形式如下:

cv2.imread(path, flags)

參數(shù)意義如下:

  • path: 該參數(shù)制定圖片的路徑唬血,可以使用相對路徑,也可以使用絕對路徑唤崭;
  • flags:指定以何種方式加載圖片拷恨,有三個取值:
    1. cv2.IMREAD_COLOR:讀取一副彩色圖片,圖片的透明度會被忽略谢肾,默認為該值腕侄,實際取值為1;
    2. cv2.IMREAD_GRAYSCALE:以灰度模式讀取一張圖片芦疏,實際取值為0
    3. cv2.IMREAD_UNCHANGED:加載一副彩色圖像冕杠,透明度不會被忽略。

如果給定的圖片路徑不對酸茴,該函數(shù)不會拋出異常分预,而是返回一個None,如果給定正確的圖片路徑薪捍,將返回一個[height, width, channel]的numpy.ndarray對象笼痹,height表示圖片高度,width表示圖片寬度飘诗,channel表示圖片的通道与倡。

import numpy as np
import cv2

img = cv2.imread("pic.jpg")
# img = cv2.imread("pic.jpg", cv2.IMREAD_COLOR)
# img = cv2.imread("pic.jpg", cv2.IMREAD_GRAYSCALE)
# img = cv2.imread("pic.jpg", cv2.IMREAD_UNCHANGED)

cv2.imshow("image", img) # 顯示圖片,后面會講解
cv2.waitKey(0) #等待按鍵

效果如下:

opencv002.png
opencv001.png
opencv003.png
cv2.IMREAD_COLOR cv2.IMREAD_GRAYSCALE cv2.UNCHANGED

2. 顯示圖片

使用cv2.imshow()函數(shù)在一個窗口中顯示圖片昆稿,這個窗口自適應圖片的大小,其形式如下:

cv2.imshow(winname, mat)

參數(shù)意義如下:

1. winame:一個字符串纺座,表示創(chuàng)建的窗口名字,每一個窗口必須有一個唯一的名字溉潭;
2. mat:是一個圖片矩陣净响,numpy.ndarray類型

在圖片顯示的過程中,通常會伴隨幾個其他的函數(shù)喳瓣,他們分別是:

  • cv2.waitKey()
  • cv2.destroyAllWindows()
  • cv2.destroyWindow()
  • cv2.namedWindow()

因為我們的程序是順序執(zhí)行馋贤,如果沒有cv2.waitKey()函數(shù),圖像不會顯示(也許是一閃而過畏陕,我們?nèi)搜塾^察不到)配乓,cv2.waitKey()函數(shù)是一個鍵盤綁定函數(shù)(相當于讓程序在這里掛起暫停執(zhí)行),他接受一個單位為毫秒的時間惠毁,它等待指定時間的鍵盤事件犹芹,在指定時間內(nèi)發(fā)生了鍵盤事件,程序繼續(xù)執(zhí)行鞠绰,否則必須等到時間結(jié)束才能繼續(xù)執(zhí)行腰埂,參數(shù)如果為0表示等待無限長的事件。

cv2.destroyAllWindows()用來銷毀所有已經(jīng)創(chuàng)建的窗口蜈膨, 如果需要銷毀指定窗口使用cv2.destroyWindow()函數(shù)屿笼,他接受一個表示窗口名字的名字牺荠。

在這里我們直接用cv2.imshow()創(chuàng)建的窗口是自動適應圖片大小的,不能縮放驴一,如果我們想放大縮小窗口休雌,必須單獨用cv2.namedWindow(),并通過flag參數(shù)指定窗口模式為cv2.WINDOW_NORMAL,默認為cv2.WINDOW_AUTOSIZE.

下面是一個窗口可以發(fā)達縮小的顯示圖片的例子:

import numpy as np
import cv2

img = cv2.imshow('picture.jpg')
cv2.namedWindow('image')
cv2.imshow('image', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

3. 保存圖片

使用cv2.imwrite()函數(shù)來保存圖片,形式如下:

cv2.imwrite(filename, img)

參數(shù)意義如下:

  • filename: 保存文件的路徑名
  • img: 表示圖像的numpy.ndarray對象

4. 一個完整程序

import numpy as np
import cv2

img = cv2.imread('messi5.jpg',0)
cv2.imshow('image',img)
k = cv2.waitKey(0)
## k = cv2.waitKey(0) & 0xFF  # 64位機器
if k == 27:         # 按下esc時蛔趴,退出
    cv2.destroyAllWindows()
elif k == ord('s'): # 按下s鍵時保存并退出
    cv2.imwrite('messigray.png',img)
    cv2.destroyAllWindows()

5. 使用matplotlib顯示圖片

import numpy as np
import cv2
from matplotlib import pyplot as plt

img = cv2.imread('messi5.jpg',0)
plt.imshow(img, cmap = 'gray', interpolation = 'bicubic')
plt.xticks([]), plt.yticks([])  # 隱藏x挑辆、y軸
plt.show()

因為opencv以BGR模式加載圖片,而matplotlib以RGB模式顯示圖片孝情,所以用opencv加載的彩色圖片鱼蝉,在matplotlib中不能正確顯示,解決方法箫荡。

6. C++語法

以上都是在python語言中的介紹,用C++語言其實采用同樣的函數(shù)魁亦,只是寫法不一樣而已,比如:

import cv2 -> inclue<opencv2/core/core2.hpp>
cv2.imread() -> cv2::imread()
cv2.imshow() -> cv2::imshow()
cv2.imwrite() -> cv2::imwrite()

參考資料

Getting Started with Images

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末羔挡,一起剝皮案震驚了整個濱河市洁奈,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌绞灼,老刑警劉巖利术,帶你破解...
    沈念sama閱讀 219,039評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機仑性,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來轮蜕,“玉大人,你說我怎么就攤上這事蝗锥≡韭澹” “怎么了?”我有些...
    開封第一講書人閱讀 165,417評論 0 356
  • 文/不壞的土叔 我叫張陵终议,是天一觀的道長汇竭。 經(jīng)常有香客問我,道長穴张,這世上最難降的妖魔是什么细燎? 我笑而不...
    開封第一講書人閱讀 58,868評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮陆馁,結(jié)果婚禮上找颓,老公的妹妹穿的比我還像新娘合愈。我一直安慰自己叮贩,他們只是感情好击狮,可當我...
    茶點故事閱讀 67,892評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著益老,像睡著了一般彪蓬。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上捺萌,一...
    開封第一講書人閱讀 51,692評論 1 305
  • 那天档冬,我揣著相機與錄音,去河邊找鬼桃纯。 笑死酷誓,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的态坦。 我是一名探鬼主播盐数,決...
    沈念sama閱讀 40,416評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼伞梯!你這毒婦竟也來了玫氢?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,326評論 0 276
  • 序言:老撾萬榮一對情侶失蹤谜诫,失蹤者是張志新(化名)和其女友劉穎漾峡,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體喻旷,經(jīng)...
    沈念sama閱讀 45,782評論 1 316
  • 正文 獨居荒郊野嶺守林人離奇死亡生逸,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,957評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了掰邢。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片牺陶。...
    茶點故事閱讀 40,102評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖辣之,靈堂內(nèi)的尸體忽然破棺而出掰伸,到底是詐尸還是另有隱情,我是刑警寧澤怀估,帶...
    沈念sama閱讀 35,790評論 5 346
  • 正文 年R本政府宣布狮鸭,位于F島的核電站,受9級特大地震影響多搀,放射性物質(zhì)發(fā)生泄漏歧蕉。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,442評論 3 331
  • 文/蒙蒙 一康铭、第九天 我趴在偏房一處隱蔽的房頂上張望惯退。 院中可真熱鬧,春花似錦从藤、人聲如沸催跪。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,996評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽懊蒸。三九已至荣倾,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間骑丸,已是汗流浹背舌仍。 一陣腳步聲響...
    開封第一講書人閱讀 33,113評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留通危,地道東北人铸豁。 一個月前我還...
    沈念sama閱讀 48,332評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像菊碟,于是被迫代替她去往敵國和親推姻。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,044評論 2 355

推薦閱讀更多精彩內(nèi)容