1. 程式人生 > >Python下opencv使用筆記(一)(圖像簡單讀取、顯示與儲存)

Python下opencv使用筆記(一)(圖像簡單讀取、顯示與儲存)

操作 灰度圖 清晰 ren from tty ims 圖像 type

  • 寫在之前
    從去年開始關註python這個軟件,途中間間斷斷看與學過一些關於python的東西。感覺python確實是一個簡單優美、easy上手的腳本編程語言,眾多的第三方庫使得python異常的強大。能夠處理很多不同的問題,同一時候它的很多開源免費的庫使得python的使用也是十分的廣泛。

    在科學計算、數據處理與圖像領域,自己以前一直在使用matlab。感覺matlab也是一個語言優美、簡單方便的編程語言,都說matlab與python在某些領域是非常類似的,確實是這樣,就科學計算、數據處理上真是,matlab中很多科學計算的東西在python中基本上都有相應的庫包包括進去,比方numpy,matplotlib等等,這些都是強大而又適用的。可是要說不同。那就是應用層面的了。matlab是一個商業性質的軟件,正版軟件也是異常的貴,個人感覺屬於研究性領域的用的較多,在工作後好像一般都不怎麽用這個(可能比較貴的緣故)。可是總的來說matlab相同在計算領域是強大無比的。
    Opencv是一個開源的計算機視覺庫,從開始研究圖像方面,並沒有真正接觸過它,使用的都是matlab帶的圖像處理庫,如今看來他們非常多函數也是那麽的神似。可是opencv畢竟是一個專業性的庫包,裏面的很多函數matlab並沒有,並且從其使用面及推廣程度上看,opencv確實也是那麽強大。

    所以在圖像領域了解opencv(不管是python版本號的還是C++版本號的)都是必要的,可是對於簡單適用的學習者來說。了解了解python版的就足夠了。

(一)關於python

首先關於python想說的是。單純的官網下載的python並不大,是一個最初的python。進行一些簡單的操作時能夠的。可是當你進行復雜一點的時候,就須要很多第三方的安裝包。比方numpy等等,這些庫安裝進去說起來也不是非常復雜,網上有非常多教程,可是當很多的包安裝的時候,有的庫包並沒有你的電腦的版本號,等等還有很多因素導致你的庫包安裝不進去,想想還是挺麻煩的。我自己以前就是安裝各種包快要崩潰了。最後索性找到了一個集成的軟件,就是把經常使用的包都加進去了的python,軟件是Ipython。是一個集成的科學計算軟件。裏面集成了很多包,並且是一個神似matlab的軟件,有調試,測試。觀看變量數值等等很多相同的地方,所以假設你是想研究這樣面而又苦惱安裝包的話,就下載個這個安裝起來吧。

(二)Python下的opencv使用

本系列博客的重點是記錄python下學習opencv的方法、筆記與一些想法。關於這樣的類型主題。csdn上也有非常多,也有非常專業的,首推的就是以下這個博主寫的一個PDF文件,確實是好東西(大感博主無私):
http://bbs.csdn.net/topics/390837851
http://pan.baidu.com/s/1jG62bhO
再有就是以下這個博主系列的博客,非常的好,能夠學習:
http://blog.csdn.net/sunny2038/article/category/904451
在眾多資料下,簡單記錄下自己的學習筆記。

(三)從頭開始–讀取圖像

關於python下使用opencv讀取圖像。

首先須要導入opencv包,上面說的那個Ipython並沒有opencv包,所以想使用的請先正確導入opencv包再說。至於怎麽導入,先下載個opencv包,裏面有關於python的opencv包,把這個想辦法導進去進行了(非常easy,百度下。略過吧)。
關於Ipython的執行界面,我的是這樣的(名字變成spyder了):
技術分享
在讀取圖像之前,你得把你的做實驗的圖像事先放到工作文件夾下才行。讀取函數是cv2.imread(),關於函數說明:
cv2.imread(‘圖像名稱’。’可選參數’)
可選參數決定讀入圖像的模式:
0:讀入的為灰度圖像(即使圖像為彩色的)
1:讀入的圖像為彩色的(默認);
註意的是:即使圖像在工作空間不存在,這個函數也不會報錯,僅僅只是讀入的結果為none。好了。讀入一個圖像就是這樣的:
import cv2
img = cv2.imread(‘flower.jpg’)
當你的import cv2執行後沒有錯誤了,那麽就導入成功了。

(四)儲存圖像

儲存圖像函數:cv2.imwrite(‘保存的圖像名’,圖像,‘參數’)
正常的圖像儲存使用就是cv2.imwrite(‘保存的圖像名’。圖像)。後面一個參數默認。保存的圖像名還得帶類型,比方jpg,bmp等等,OpenCV眼下支持讀取bmp、jpg、png、tiff等經常使用格式。第三個參數較復雜,還得分是jpg、bmp等等圖像的類型不同而不同,事實上就是決定了圖像儲存大小,清晰度的,默認的就非常好。想細究的能夠看以下。這個裏面有部分介紹:
OpenCV Python教程(1、圖像的加載、顯示和保存)
那麽在得到一副圖像想儲存,比方就直接:cv2.imwrite(‘good_gray.tif’,img)

(五)圖像顯示

Opencv自帶顯示圖像函數。可是較為復雜並且個人感覺不穩定。這裏在介紹一種顯示方法,就是使用庫包matplotlib(這個庫包Ipython自帶)來顯示圖像。
首先是opencv自帶函數顯示,一般要顯示一個圖像。在圖像有了之後,然後直接以下函數一起組合使用:

cv2.imshow(‘image‘,img)
cv2.waitKey(0)
cv2.destroyAllWindows()

函數cv2.imshow的第一個參數是名字,第二個是要顯示的圖。然而為了讓圖像在顯示屏上停留才有了以下兩句話一起使用。因為系統(32位與64位)的不一樣,有的時候會出現顯示不出來,個人感覺opencv本身c語言寫的。存在著系統上的差異,並且這樣的顯示方法無法保存圖像、調整圖像大小等等,這裏介紹還有一種經常使用且強大的顯示圖像方法,使用matplotlib庫包中的pyplot子包來顯示,這樣的顯示方法不但穩定。還能夠調整大小、保存顯示的圖像等等。那麽一般它的用法例如以下:

import cv2
from matplotlib import pyplot as plt
img = cv2.imread(‘good.jpg‘,0);#打開為灰度圖像
plt.imshow(img, ‘gray‘) #必須規定為顯示的為什麽圖像
plt.xticks([]),plt.yticks([]) #隱藏坐標線 
plt.show() #顯示出來。不要也能夠,可是一般都要了

以下是顯示的上述圖,能夠看到會在一個新的界面顯示出來:
技術分享

Python下opencv使用筆記(一)(圖像簡單讀取、顯示與儲存)