2 用python進(jìn)行OpenCV實(shí)戰(zhàn)之圖像基本知識

前言

在這一節(jié),我們將學(xué)習(xí)圖像的基本構(gòu)成單元——像素禽拔,我們將詳細(xì)的探討什么是像素?像素是如何使用來構(gòu)成圖像的?然后學(xué)習(xí)如何通過OpenCV來獲取和操縱像素褪尝。

1 什么是像素

所有的圖像都包含一組像素,像素是圖像的原始構(gòu)建塊期犬。 沒有比像素更細(xì)的單位了河哑。
通常,我們將像素認(rèn)為是在我們的圖像給定位置出現(xiàn)的光的顏色或者強(qiáng)度龟虎,如果我們將圖像考慮成一個(gè)網(wǎng)格璃谨,在網(wǎng)格中的每個(gè)方塊都包含一個(gè)單一的像素。例如遣总,我們假設(shè)有一個(gè)分辨率是500300的圖像睬罗,這就意味著我們的圖像被分成一個(gè)關(guān)于像素的網(wǎng)格轨功,這個(gè)網(wǎng)格有500個(gè)行,300個(gè)列容达,綜上可知古涧,總共有500300=150000個(gè)像素在這張圖片中。
像素主要有兩種表達(dá)形式:灰度模式和彩色模式花盐。在一張灰度圖片中羡滑,每個(gè)像素有一個(gè)從0至255{[0,255]}的值,其中0表示“純黑色”算芯,255表示“純白色”柒昏,在0和255之間的值變現(xiàn)成不同深淺的灰色,當(dāng)值靠近0時(shí)熙揍,圖像更暗职祷,當(dāng)值靠近255時(shí),圖像更亮届囚。
彩色模式的圖片通常用RGB顏色空間來表示(R for red, G for green, B for blue),還有一些其他的模式比如CMY,但是在這里我們先不討論有梆。
我們以(red, green, blue)的形式來表示RGB元組,這個(gè)元組就表示了我們的顏色意系,其中這三種顏色的值用在[0,255]之間的整數(shù)值表示泥耀,所以我們通常用unsigned int類型來表示每個(gè)顏色的強(qiáng)度。
為了構(gòu)成白色蛔添,我們需要用(255, 255, 255)來表示痰催,為了得到黑色,我們需要用(0, 0, 0)來表示迎瞧,紅(255, 0, 0),綠(0, 255, 0),藍(lán)(0, 0, 255).
RGB配色表

色光三原色

2 圖像坐標(biāo)系概述

正如我們之前所提到的夸溶,我們將一張圖片以像素網(wǎng)格的形式表示,我們想象一下假設(shè)我們的圖片為一張圖表紙夹攒,圖像的左上角為原點(diǎn)蜘醋。


圖像坐標(biāo)系

3 獲取和操縱像素

上一節(jié)中,我們從磁盤中讀取了圖片咏尝,然后將它轉(zhuǎn)換了格式再存儲到了磁盤中压语,在這一節(jié)我們將對如何獲取和操縱圖像的像素進(jìn)行實(shí)戰(zhàn),建立

getting_and_setting.py

3.1 代碼

from __future__ import print_function #1
import argparse #2
import cv2 #3

ap = argparse.ArgumentParser() #4
ap.add_argument("-i", "--image", required=True,
                help="Path to the image") #5
args = vars(ap.parse_args()) #6

image = cv2.imread(args["image"]) #7
cv2.imshow("Original", image) #8
 
(b, g, r) = image[0, 0] #9
print("Pixel at (0, 0) - Red: {}, Green: {}, Blue: {}".format(r, g, b)) #10

image[0, 0] = (0, 0, 255) #11
(b, g, r) = image[0, 0] #12
print("Pixel at (0, 0) - Red: {}, Green: {}, Blue: {}".format(r, g, b)) #13

corner = image[0:200, 0:100] #14
cv2.imshow("corner1", corner) #15

image[0:200, 0:100] = (0, 255, 0) #16
cv2.imshow("update", image) #17
cv2.waitKey(0) #18

3.2 代碼詳細(xì)解釋

#1-6:
關(guān)于這段代碼在第一節(jié)中已經(jīng)進(jìn)行過詳細(xì)解釋了编检,主要是為了導(dǎo)包胎食,命令行參數(shù)的處理

#7-8:
展示原始圖片

#9:
在第一節(jié)中,就曾經(jīng)提到過OpenCV是用NumPy數(shù)組來表示圖像的允懂,我們也可以將這種表示看成是一種矩陣表示厕怜,為了獲取像素,我們需要應(yīng)用我們所感興趣的x,y坐標(biāo),從中我們可以得到一個(gè)表示(r,g,b)的元組粥航,然而琅捏,我們需要注意的是:在OpenCV中是以逆序存儲RGB通道到的,即我們通常以red,green,blue的順序來記憶递雀,但是OpenCV則是以blue,green,red的順序來儲存的.

(b, g, r) = image[0, 0]

通過獲得圖像(0,0)處的像素柄延,并將它賦值給一個(gè)三元組,我們可以再次看出OpenCV以逆序存取RGB像素缀程,所以當(dāng)我們在元組中得到每個(gè)元素時(shí)候搜吧,我們需要以BGR的順序來獲取

#10:
輸出RGB每個(gè)通道的值到終端⊙畲眨可以看出我們獲取像素值的方法非常簡單滤奈,而這一切都要?dú)w功于NumPy,它替我們做了一系列的復(fù)雜工作。

#11:
我們操縱在左上角的像素撩满,即在(0,0)處的像素蜒程,我們給他賦值(0,0,255),如果我們將它以RGB的格式來讀的話伺帘,我們認(rèn)為:red值是0搞糕,green值是0,blue值是255曼追,所以我們將得到純藍(lán)色。然而汉规,正如我們之前所提到的OpenCV是以BGR的格式存儲像素的而不是RGB格式礼殊,所以我們實(shí)際上得到的是:red值是255,green值是0针史,blue值是0晶伦,因此我們得到的是一個(gè)純紅色而不是純藍(lán)色。

#12,13:
通過得到在(0,0)像素點(diǎn)的BGR顏色值啄枕,然后將它們以RGB的形式輸出

#14
獲取以及操縱單一的像素點(diǎn)是相當(dāng)簡單的婚陪,那如果使用NumPy的數(shù)組分割能力得到圖像的一塊長方形區(qū)域呢?

corner = image[0:200, 0:100] #14

在第一節(jié)我們介紹過image的數(shù)組里的第一個(gè)參數(shù)是高即y,第二個(gè)參數(shù)是寬即x,所以corner將得到一個(gè)100*200大小的長方形區(qū)域频祝,而這個(gè)區(qū)域即為圖像的左上角區(qū)域泌参。

#15:
將corner以“Corner”的名稱顯示出來

#16:
將左上角的區(qū)域用(0,255,0)即綠色來表示,實(shí)現(xiàn)了改變一整塊區(qū)域的像素值的目的常空。

#17:
以“Updated”的名稱顯示圖像

#18:
cv2.waitKey()表示暫停腳本的執(zhí)行直到在鍵盤輸入一個(gè)按鍵沽一,用“0”作為參數(shù)表示可以使用任何按鍵作為繼續(xù)腳本執(zhí)行的按鈕。

效果展示

顯示效果

轉(zhuǎn)載請注明出處:
CSDN:樓上小宇__home:http://http://blog.csdn.net/sty945
簡書:樓上小宇:http://www.reibang.com/u/1621b29625df

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末漓糙,一起剝皮案震驚了整個(gè)濱河市铣缠,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌蝇庭,老刑警劉巖哮内,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件病曾,死亡現(xiàn)場離奇詭異泰涂,居然都是意外死亡逼蒙,警方通過查閱死者的電腦和手機(jī)僵井,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來社搅,“玉大人合呐,你說我怎么就攤上這事淌实〔鹌恚” “怎么了缘屹?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵犁珠,是天一觀的道長犁享。 經(jīng)常有香客問我,道長凤巨,這世上最難降的妖魔是什么敢茁? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任谎砾,我火速辦了婚禮景图,結(jié)果婚禮上郎笆,老公的妹妹穿的比我還像新娘。我一直安慰自己激捏,他們只是感情好闰蛔,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布蚤吹。 她就那樣靜靜地躺著,像睡著了一般拱她。 火紅的嫁衣襯著肌膚如雪秉沼。 梳的紋絲不亂的頭發(fā)上唬复,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天妄均,我揣著相機(jī)與錄音,去河邊找鬼哪自。 笑死丰包,一個(gè)胖子當(dāng)著我的面吹牛邑彪,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播寄症,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起乃戈,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤堰乔,失蹤者是張志新(化名)和其女友劉穎偏化,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體苟翻,經(jīng)...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡韵卤,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了崇猫。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片沈条。...
    茶點(diǎn)故事閱讀 39,795評論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖诅炉,靈堂內(nèi)的尸體忽然破棺而出蜡歹,到底是詐尸還是另有隱情,我是刑警寧澤涕烧,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布月而,位于F島的核電站,受9級特大地震影響议纯,放射性物質(zhì)發(fā)生泄漏父款。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一瞻凤、第九天 我趴在偏房一處隱蔽的房頂上張望憨攒。 院中可真熱鬧,春花似錦阀参、人聲如沸肝集。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽包晰。三九已至,卻和暖如春炕吸,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背勉痴。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工赫模, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人蒸矛。 一個(gè)月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓瀑罗,卻偏偏與公主長得像胸嘴,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子斩祭,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,724評論 2 354

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