【OpenCV-Python】(一)OpenCV的安裝及簡(jiǎn)單使用

一逮壁、OpenCV-Python的安裝

直接使用pip方法進(jìn)行安裝

pip install opencv-python

可能還會(huì)用到其他的庫(kù)村斟,這里一起安裝奶陈。

pip install numpy
pip install matplotlib

直接使用pip可能會(huì)出現(xiàn)安裝時(shí)下載速度較慢的問(wèn)題,可以通過(guò)切換下載源來(lái)解決蔚舀。切換下載源有兩種方法:
1.在每次使用pip時(shí)聲明下載源饵沧,如:

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple opencv-python

2.直接為pip設(shè)置下載源
C:\Users\xxx\ 下新建一個(gè)pip文件夾,在文件夾下新建一個(gè)pip.ini文件赌躺,pip.ini中寫下如下文本即可

[grobal]
index-url=https://pypi.tuna.tsinghua.edu.cn/simple

其中index-url即為pip使用下載源狼牺,這里也可以還可以換成別的安裝源,比如:
1.豆瓣 http://pypi.douban.com/simple
2.阿里云 http://mirrors.aliyun.com/pypi/simple
3.中科大 http://pypi.mirrors.ustc.edu.cn/simple
4.清華 https://pypi.tuna.tsinghua.edu.cn/simple

二礼患、圖片操作

這一部分將教我們學(xué)會(huì)怎樣讀入一幅圖像锁右,怎樣顯示一幅圖像,以及如何保存一幅圖像讶泰。

1.讀入圖像

使用函數(shù) cv2.imread(filename, flags=None) 讀入圖像咏瑟。第一個(gè)參數(shù)為需要讀取的圖片的路徑;第二個(gè)參數(shù)時(shí)要告訴函數(shù)如何讀取圖片痪署。

import cv2

img = cv2.imread('lena.jpg', cv2.IMREAD_COLOR)
cv2.imread()的第二參數(shù):
  • cv2.IMREAD_ANYCOLOR
  • cv2.IMREAD_ANYDEPTH
  • cv2.IMREAD_COLOR # 讀入彩圖
  • cv2.IMREAD_GRAYSCALE # 讀入灰度圖
  • cv2.IMREAD_IGNORE_ORIENTATION
  • cv2.IMREAD_LOAD_GDAL
  • cv2.IMREAD_REDUCED_COLOR_2 # 讀入彩圖并縮小到原來(lái)的1/2
  • cv2.IMREAD_REDUCED_COLOR_4
  • cv2.IMREAD_REDUCED_COLOR_8
  • cv2.IMREAD_REDUCED_GRAYSCALE_2 # 讀入灰度圖并縮小到原來(lái)的1/2
  • cv2.IMREAD_REDUCED_GTAYSCALE_4
  • cv2.IMREAD_REDUCED_GRAYSCALE_8
  • cv2.IMREAD_UNCHANGED

2.顯示圖像

使用函數(shù) cv2.imshow(winname, mat) 顯示圖像码泞。第一個(gè)參數(shù)為窗口的名字,隨意設(shè)置狼犯;第二個(gè)參數(shù)為需要傳入的圖像余寥。

import cv2

img = cv2.imread('lena.jpg', cv2.IMREAD_COLOR)
cv2.imshow('image', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

lena.jpg

cv2.waitKey(delay=None)是一個(gè)鍵盤綁定函數(shù),需要指出的是它的時(shí)間尺度是毫秒級(jí)悯森。函數(shù)等待特定的幾毫秒宋舷,看是否有鍵盤輸入。特定的幾毫秒之內(nèi)瓢姻,如果按下任意鍵祝蝠,這個(gè)函數(shù)會(huì)返回按鍵的 ASCII 碼值,程序?qū)?huì)繼續(xù)運(yùn)行幻碱。如果沒(méi)有鍵盤輸入绎狭,返回值為 -1,如果我們?cè)O(shè)置這個(gè)函數(shù)的參數(shù)為 0褥傍,那它將會(huì)無(wú)限期的等待鍵盤輸入儡嘶。它常被用來(lái)檢測(cè)特定按鍵是否被按下。
cv2.destroyAllWindows()刪除所有我們建立的窗口恍风。如果想要?jiǎng)h除特定的窗口可以使用cv2.destroyWindow(winname)

所以蹦狂,上述代碼表示顯示一張圖像誓篱,如果有按鍵輸入,就關(guān)閉圖像凯楔。

3.保存圖像

使用函數(shù) cv2.imwrite(filename, img, params=None) 來(lái)保存圖像燕鸽。

import cv2

img = cv2.imread('lena.jpg', cv2.IMREAD_GRAYSCALE)
cv2.imshow('image',img)
k = cv2.waitKey(0)&0xFF
if k == 27:         # wait for ESC key to exit
    cv2.destroyAllWindows()
elif k == ord('s'): # wait for 's' key to save and exit
    cv2.imwrite('lena_gray.jpg',img)
    cv2.destroyAllWindows()

如果電腦是64位系統(tǒng),通常需要將 k = cv2.waitKey(0) 改成 k = cv2.waitKey(0)&0xFF

三啼辣、視頻操作

這一部分主要是學(xué)習(xí)如何讀取視頻文件,如何顯示視頻和保存視頻文件御滩;另外還學(xué)習(xí)如何從攝像頭獲取并顯示視頻鸥拧。

1.用攝像頭捕獲視頻

我們經(jīng)常會(huì)使用攝像頭捕獲實(shí)時(shí)圖像,而OpenCV恰好為我們提供了一個(gè)簡(jiǎn)單的接口削解。
為了獲取視頻富弦,我們應(yīng)該線創(chuàng)建一個(gè)VideoCapture對(duì)象,即 cap = cv2.VideoCapture() 氛驮,它的參數(shù)可以是設(shè)備的索引號(hào)腕柜,也可以是一個(gè)視頻文件。一般的筆記本電腦都有內(nèi)置的攝像頭矫废,所以參數(shù)就是0盏缤。當(dāng)然,我們也可以通過(guò)設(shè)置成1或者其他索引號(hào)來(lái)選擇別的攝像頭蓖扑。這樣唉铜,我們就可以一幀一幀地捕獲視頻了。另外律杠,最后別忘了停止捕獲視頻潭流。

import cv2

# 1.創(chuàng)建一個(gè)VideoCapture對(duì)象,使用筆記本電腦內(nèi)置攝像頭
cap = cv2.videoCapture(0)

while(Ture):
    # 2.攝像頭捕獲一幀數(shù)據(jù)
    ret, frame = cap.read()

    # 3.顯示一幀數(shù)據(jù)
    cv2.imshow('frame', frame)
    if(cv2.waitKey(1)&0xFF == ord('q')):
        break

# 4.停止捕獲視頻
cap.release()
cv2.destroyAllWindows()

cap.read() 返回一個(gè)布爾值(True/False)柜去。如果幀讀取正確則返回True灰嫉。所以這個(gè)函數(shù)通常被用來(lái)檢查視頻文件是否已經(jīng)到了結(jié)尾。
另外幾個(gè)重要的函數(shù):
cap.get(propId) 獲取視頻地一些參數(shù)信息嗓奢。這里的propId可以是0到18之間的任何整數(shù)讼撒。

propId參數(shù)
  • CV_CAP_PROP_POS_MSEC視頻文件的當(dāng)前位置(以毫秒為單位)或視頻捕獲時(shí)間戳」傻ⅲ—— 0
  • CV_CAP_PROP_POS_FRAMES接下來(lái)要解碼/捕獲的幀的基于0的索引椿肩。—— 1
  • CV_CAP_PROP_POS_AVI_RATIO視頻文件的相對(duì)位置:0 - 電影的開(kāi)始豺谈,1 - 電影的結(jié)尾郑象。—— 2
  • CV_CAP_PROP_FRAME_WIDTH視頻流中幀的寬度茬末〕ч唬—— 3
  • CV_CAP_PROP_FRAME_HEIGHT視頻流中幀的高度盖矫。—— 4
  • CV_CAP_PROP_FPS幀速率击奶”菜—— 5
  • CV_CAP_PROP_FOURCC編解碼器的4字符代碼」窭—— 6
  • CV_CAP_PROP_FRAME_COUNT視頻文件中的幀數(shù)湃望。—— 7
  • CV_CAP_PROP_FORMAT返回的Mat對(duì)象的格式retrieve()痰驱≈ぐ牛—— 8
  • CV_CAP_PROP_MODE指示當(dāng)前捕獲模式的特定于后端的值〉S常—— 9
  • CV_CAP_PROP_BRIGHTNESS圖像的亮度(僅適用于相機(jī))废士。—— 10
  • CV_CAP_PROP_CONTRAST圖像對(duì)比度(僅適用于相機(jī))蝇完」傧酰—— 11
  • CV_CAP_PROP_SATURATION圖像的飽和度(僅適用于相機(jī))《掏桑—— 12
  • CV_CAP_PROP_HUE圖像的色調(diào)(僅適用于相機(jī))氢架。—— 13
  • CV_CAP_PROP_GAIN圖像的增益(僅適用于相機(jī))朋魔〈锕浚—— 14
  • CV_CAP_PROP_EXPOSURE曝光(僅適用于相機(jī))∑坛—— 15
  • CV_CAP_PROP_CONVERT_RGB布爾標(biāo)志缎玫,指示是否應(yīng)將圖像轉(zhuǎn)換為RGB〗庾遥—— 16
  • CV_CAP_PROP_WHITE_BALANCE白平衡(當(dāng)前不支持)—— 17
  • CV_CAP_PROP_RECTIFICATION立體攝像機(jī)的整流標(biāo)志(注意:目前僅支持DC1394 v 2.x后端)—— 18

cap.set(propId, value)可以用來(lái)設(shè)置某些參數(shù)的值赃磨。比如可以通過(guò)使用 cap.set(3, 320)和cap.set(4, 240)將寬和高設(shè)置成320×240
cap.isOpened()檢查是否成功初始化攝像頭設(shè)備,成功則返回True洼裤,否則則需要使用 cap.open() 開(kāi)啟邻辉。

2.從文件中播放視頻

與從攝像頭中捕獲一樣,只需要將設(shè)備索引號(hào)改成視頻文件的名字即可播放視頻文件腮鞍。在播放每一幀時(shí)值骇,使用 cv2.waiKey() 設(shè)置適當(dāng)?shù)某掷m(xù)時(shí)間。如果設(shè)置的太低視頻就會(huì)播放的非骋乒快吱瘩,如果設(shè)置的太高就會(huì)播放的很慢(你可以使用這種方法控制視頻的播放速度)。通常情況下 25 毫秒就可以了迹缀。

import cv2

cap = cv2.VideoCapture('vtest.avi')

while(cap.isOpened()):
    ret, frame = cap.read()

    # 轉(zhuǎn)成灰度圖
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

    cv2.imshow('frame',gray)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

cap.release()
cv2.destroyAllWindows()

3.保存視頻

在我們捕獲視頻使碾,并對(duì)每一幀都進(jìn)行加工之后我們想要保存這個(gè)視頻蜜徽。對(duì)于圖片來(lái)時(shí)很簡(jiǎn)單只需要使用 cv2.imwrite()。但對(duì)于視頻來(lái)說(shuō)就要多做點(diǎn)工作票摇。
我們要?jiǎng)?chuàng)建一個(gè) VideoWriter 的對(duì)象拘鞋。我們應(yīng)該確定一個(gè)輸出文件的名字。接下來(lái)指定 FourCC 編碼(下面會(huì)介紹)矢门。播放頻率和幀的大小也都需要確定盆色。最后一個(gè)是 isColor 標(biāo)簽。如果是 True祟剔,每一幀就是彩色圖隔躲,否則就是灰度圖。
FourCC 就是一個(gè) 4 字節(jié)碼峡扩,用來(lái)確定視頻的編碼格式≌媳荆可用的編碼列表可以從fourcc.org查到教届。這是平臺(tái)依賴的。下面這些編碼器對(duì)我來(lái)說(shuō)是有用個(gè)驾霜。

  • In Fedora: DIVX, XVID, MJPG, X264, WMV1, WMV2. (XVID is more preferable. MJPG results in high size video. X264 givesvery small size video)
  • In Windows: DIVX (More to be tested and added)
  • In OSX : (I don’t have access to OSX. Can some one fill this?)

FourCC 碼以下面的格式傳給程序案训,以 MJPG 為例:
cv2.cv.FOURCC('M','J','P','G')或者 cv2.cv.FOURCC(*'MJPG')

下面的代碼是從攝像頭中捕獲視頻,沿水平方向旋轉(zhuǎn)每一幀并保存它粪糙。

import cv2

cap = cv2.VideoCapture(0)

fourcc = cv2.VideoWriter_fourcc(*'DIVX')
out = cv2.VideoWriter('output.avi',fourcc, 20.0, (640,480))

while(cap.isOpened()):
    ret, frame = cap.read()
    if ret==True:
        frame = cv2.flip(frame,0)  # 旋轉(zhuǎn)

        # 保存
        out.write(frame)

        cv2.imshow('frame',frame)
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break
    else:
        break

cap.release()
out.release()
cv2.destroyAllWindows()
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末强霎,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子蓉冈,更是在濱河造成了極大的恐慌城舞,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,542評(píng)論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件寞酿,死亡現(xiàn)場(chǎng)離奇詭異家夺,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)伐弹,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門拉馋,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人惨好,你說(shuō)我怎么就攤上這事煌茴。” “怎么了日川?”我有些...
    開(kāi)封第一講書人閱讀 163,912評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵蔓腐,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我龄句,道長(zhǎng)合住,這世上最難降的妖魔是什么绰精? 我笑而不...
    開(kāi)封第一講書人閱讀 58,449評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮透葛,結(jié)果婚禮上笨使,老公的妹妹穿的比我還像新娘。我一直安慰自己僚害,他們只是感情好硫椰,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,500評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著萨蚕,像睡著了一般靶草。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上岳遥,一...
    開(kāi)封第一講書人閱讀 51,370評(píng)論 1 302
  • 那天奕翔,我揣著相機(jī)與錄音,去河邊找鬼浩蓉。 笑死派继,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的捻艳。 我是一名探鬼主播驾窟,決...
    沈念sama閱讀 40,193評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼认轨!你這毒婦竟也來(lái)了绅络?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 39,074評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤嘁字,失蹤者是張志新(化名)和其女友劉穎恩急,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體纪蜒,經(jīng)...
    沈念sama閱讀 45,505評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡假栓,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,722評(píng)論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了霍掺。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片匾荆。...
    茶點(diǎn)故事閱讀 39,841評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖杆烁,靈堂內(nèi)的尸體忽然破棺而出牙丽,到底是詐尸還是另有隱情,我是刑警寧澤兔魂,帶...
    沈念sama閱讀 35,569評(píng)論 5 345
  • 正文 年R本政府宣布烤芦,位于F島的核電站,受9級(jí)特大地震影響析校,放射性物質(zhì)發(fā)生泄漏构罗。R本人自食惡果不足惜铜涉,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,168評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望遂唧。 院中可真熱鬧芙代,春花似錦、人聲如沸盖彭。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,783評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)召边。三九已至铺呵,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間隧熙,已是汗流浹背片挂。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,918評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留贞盯,地道東北人音念。 一個(gè)月前我還...
    沈念sama閱讀 47,962評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像邻悬,于是被迫代替她去往敵國(guó)和親症昏。 傳聞我的和親對(duì)象是個(gè)殘疾皇子随闽,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,781評(píng)論 2 354

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