[計算機視覺基礎] OpenCV_2 Read Image and Video

無論是對圖像或者是對視頻的簡單亦或是復雜的處理帘睦,我們都需要將圖片和視頻轉(zhuǎn)化為代碼能夠“明白”的格式骑篙,而在 OpenCV-Python 中碰酝,這就是 Numpy 的 Matrix巍佑。本篇文章主要介紹如何通過 OpenCV-Python 加載并顯示圖片以及視頻纷宇,這是日后處理圖片以及視頻的基礎硕舆。

視頻和圖片的關(guān)系

介紹視頻離不開圖片秽荞。不知小時候你是否在書本的空白處畫一些圖案,如果你以某一速率以上翻動書本抚官,圖案仿佛變成了一段“動畫”扬跋。由于人眼識別的頻率有限,故而當在單位時間內(nèi)看到的圖像數(shù)目超過一定的數(shù)目凌节,給人眼造成的感覺就是畫面是運動的钦听,這時圖片的連續(xù)播放便形成了視頻洒试。這個頻率一般為25張圖片/秒以上,我們經(jīng)常聽到的幀率即為每秒播放的圖片的個數(shù)朴上±萜澹可以這么說:視頻是由圖片組成,是以一定速率進行連續(xù)播放的行為在肉眼下形成的視覺效果痪宰。當然叼架,提供一個視頻,也可以通過一定的方法獲得其組織而成的圖片衣撬,進而對其進行處理碉碉。

Read Image

Show you the code firstly:

import cv2 as cv
img = cv.imread("./flower.jpeg")
print(img.shape) # (366, 650, 3)
cv.imshow("img", img)
cv.waitKey(0)

cv.imread(filename, flags=None)
讀取指定支持類型的本地圖片類型的文件,返回 Numpy.ndarray 類型的數(shù)組淮韭,這里因為有BGR三個通道垢粮,所以 shape 為 (366, 650, 3)。
filename:支持 absolutle or relative靠粪,4.5.3 支持的圖片類型如下:

    .   -   Windows bitmaps - \*.bmp, \*.dib
    .   -   JPEG files - \*.jpeg, \*.jpg, \*.jpe
    .   -   JPEG 2000 files - \*.jp2
    .   -   Portable Network Graphics - \*.png
    .   -   WebP - \*.webp
    .   -   Portable image format - \*.pbm, \*.pgm, \*.ppm \*.pxm, \*.pnm 
    .   -   PFM files - \*.pfm
    .   -   Sun rasters - \*.sr, \*.ras
    .   -   TIFF files - \*.tiff, \*.tif
    .   -   OpenEXR Image files - \*.exr
    .   -   Radiance HDR - \*.hdr, \*.pic
    .   -   Raster and Vector geospatial data supported by GDAL

flags:讀取文件時可追加的操作:

enum ImreadModes
{
    IMREAD_UNCHANGED           = -1,
    IMREAD_GRAYSCALE           = 0,
    IMREAD_COLOR               = 1,
    IMREAD_ANYDEPTH            = 2,
    IMREAD_ANYCOLOR            = 4,
    IMREAD_LOAD_GDAL           = 8,
    IMREAD_REDUCED_GRAYSCALE_2 = 16,
    IMREAD_REDUCED_COLOR_2     = 17,
    IMREAD_REDUCED_GRAYSCALE_4 = 32,
    IMREAD_REDUCED_COLOR_4     = 33,
    IMREAD_REDUCED_GRAYSCALE_8 = 64,
    IMREAD_REDUCED_COLOR_8     = 65,
    IMREAD_IGNORE_ORIENTATION  = 128,
};

默認為 IMREAD_UNCHANGED蜡吧,即不做改變,常用的例如 IMREAD_GRAYSCALE 是以灰度強度讀取圖片占键,這樣讀取出的圖片是只有灰度值昔善,即肉眼所見的黑白。例如:

import cv2 as cv

img = cv.imread("./flower.jpeg", cv.IMREAD_GRAYSCALE)
print(img.shape) # (366, 650)
cv.imshow("img", img)
cv.waitKey(0)

彩色圖片變?yōu)榱撕诎?/p>

image.png

這里可以簡單介紹下一張彩色的圖片是如何變?yōu)楹诎椎呐弦遥@里涉及到 Color Space 的相關(guān)概念君仆。灰度圖的優(yōu)點是數(shù)據(jù)量更小牲距,處理起來速度更快返咱。我們以RGB模式的圖片轉(zhuǎn)灰度圖片為例。由于RGB模式的圖片擁有三個通道牍鞠,而灰度只是從黑色到白色的一維數(shù)值咖摹,所以程序需要借助每個像素的 RGB 三個通道的強度值計算出一個灰度值,比較好的算法是通過給與 R难述、G萤晴、B 對應的權(quán)重,通過加權(quán)和計算出一個灰度值胁后。這里的權(quán)重主要是根據(jù)人肉眼對于 R店读、G、B三種顏色的敏感程度(G > R > B)攀芯,基本公式如下:


image.png

cv.imshow(winname, mat)
在一個特殊的窗口上顯示一張圖片
winname:窗口的標題名稱
mat:圖片的矩陣表達

cv.waitKey(delay=None)
等待系統(tǒng)按鍵事件屯断,如果 delay 為 0 則一直等待。返回值為按鍵的碼值。

Read Video

Show you the code firstly:

import cv2 as cv
capture = cv.VideoCapture("./Videos/dog.mp4")

while True:
    isSuccess, frame = capture.read()
    if not isSuccess:
        break

    cv.imshow("", frame)
    if cv.waitKey(20) & 0xFF == ord('s'):
        break

capture.release()
cv.destroyAllWindows()

cv.VideoCapture()
視頻處理對象構(gòu)造方法裹纳,可以傳入的包括:

  • 視頻文件
  • 圖像設備(0、1紧武、2等)
  • 視頻流
    對于圖像設備剃氧,主要取決于機器一共接入了多少個可以被識別為 Capture device 的設備(webcam,攝像頭等)阻星,0朋鞍、1、2代表系統(tǒng)為之設置的編號妥箕。

isSuccess, frame = capture.read()
抓取滥酥、解碼并返回下一幀的圖像數(shù)據(jù),返回值格式與 cv.imread 相同畦幢。這里的循環(huán)其實就是逐幀的處理每一張圖片(上面有說道視頻是由圖片以一定的幀率連續(xù)播放的效果)坎吻。如果抓取到最后一張圖片或者圖片格式錯誤,則 isSuccess 為 False宇葱,frame 為空瘦真。

capture.release()
關(guān)閉視頻文件或者圖像設備,底層也會釋放申請的內(nèi)存空間黍瞧。

cv.destroyAllWindows()
銷毀所有打開的頂層UI窗口

值得注意的是诸尽,cv.waitKey(20) 決定了視頻展示的幀率,即此時為 20ms的間隔展示圖片印颤,所以忽略中間的處理時延視頻幀率為 1 / 0.02 = 50 HZ您机。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市年局,隨后出現(xiàn)的幾起案子际看,更是在濱河造成了極大的恐慌,老刑警劉巖矢否,帶你破解...
    沈念sama閱讀 217,734評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件仿村,死亡現(xiàn)場離奇詭異,居然都是意外死亡兴喂,警方通過查閱死者的電腦和手機蔼囊,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評論 3 394
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來衣迷,“玉大人畏鼓,你說我怎么就攤上這事『耍” “怎么了云矫?”我有些...
    開封第一講書人閱讀 164,133評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長汗菜。 經(jīng)常有香客問我让禀,道長挑社,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,532評論 1 293
  • 正文 為了忘掉前任巡揍,我火速辦了婚禮痛阻,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘腮敌。我一直安慰自己阱当,他們只是感情好,可當我...
    茶點故事閱讀 67,585評論 6 392
  • 文/花漫 我一把揭開白布糜工。 她就那樣靜靜地躺著弊添,像睡著了一般。 火紅的嫁衣襯著肌膚如雪捌木。 梳的紋絲不亂的頭發(fā)上油坝,一...
    開封第一講書人閱讀 51,462評論 1 302
  • 那天,我揣著相機與錄音刨裆,去河邊找鬼免钻。 笑死,一個胖子當著我的面吹牛崔拥,可吹牛的內(nèi)容都是我干的极舔。 我是一名探鬼主播,決...
    沈念sama閱讀 40,262評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼链瓦,長吁一口氣:“原來是場噩夢啊……” “哼拆魏!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起慈俯,我...
    開封第一講書人閱讀 39,153評論 0 276
  • 序言:老撾萬榮一對情侶失蹤渤刃,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后贴膘,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體卖子,經(jīng)...
    沈念sama閱讀 45,587評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,792評論 3 336
  • 正文 我和宋清朗相戀三年刑峡,在試婚紗的時候發(fā)現(xiàn)自己被綠了洋闽。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,919評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡突梦,死狀恐怖诫舅,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情宫患,我是刑警寧澤刊懈,帶...
    沈念sama閱讀 35,635評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響虚汛,放射性物質(zhì)發(fā)生泄漏匾浪。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,237評論 3 329
  • 文/蒙蒙 一卷哩、第九天 我趴在偏房一處隱蔽的房頂上張望蛋辈。 院中可真熱鬧,春花似錦殉疼、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,855評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至礼预,卻和暖如春眠砾,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背托酸。 一陣腳步聲響...
    開封第一講書人閱讀 32,983評論 1 269
  • 我被黑心中介騙來泰國打工褒颈, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人励堡。 一個月前我還...
    沈念sama閱讀 48,048評論 3 370
  • 正文 我出身青樓谷丸,卻偏偏與公主長得像,于是被迫代替她去往敵國和親应结。 傳聞我的和親對象是個殘疾皇子刨疼,可洞房花燭夜當晚...
    茶點故事閱讀 44,864評論 2 354

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