Opencv圖像讀取,顯示葛虐,保存胎源,類型轉(zhuǎn)換

圖像基本操作

環(huán)境配置地址:

圖像基本知識

  • 圖像:任何帶有信息的二維函數(shù)f(x,y)都可以被看作一幅圖像。(x,y)是定義域為平面的空間坐標(biāo)屿脐,坐標(biāo)點(x,y)上的函數(shù)值(幅值)稱為該點圖像的強度或灰度涕蚤。

  • 圖像根據(jù)圖像記錄方式的不同可分為兩大類:模擬圖像和數(shù)字圖像。

  • 模擬圖像又稱連續(xù)圖像的诵,是指在二維坐標(biāo)系中連續(xù)變化的圖像万栅,即圖像的像點是無限稠密的,同時具有灰度值(即圖像從暗到亮的變化值)西疤。

  • 數(shù)字圖像:對模擬圖像進(jìn)行空間采樣和幅值量化烦粒,使x,y和幅值均為有限的離散數(shù)值時代赁,該圖像稱為數(shù)字圖像撒遣。

  • 采樣:空間坐標(biāo)(x,y)的離散及數(shù)字化;

采樣.jpg
  • 量化:樣點的幅值離散及數(shù)字化;經(jīng)過采樣的圖像管跺,只是在空間上被離散為像素(樣本)的陣列义黎,而每一個樣本灰度值還是一個有無窮多個取值的連續(xù)變化量,必須將其轉(zhuǎn)化為有限個離散值豁跑,賦于不同碼字才能真正成為數(shù)字圖像廉涕。

  • 靜態(tài)圖像可分為矢量(Vector)圖和位圖(Bitmap)

    位圖又可以分成如下四種:
    二值圖像(binary image)
    灰度圖像(grayscale image, intensity image)
    RGB真彩色圖像(True Color)
    索引顏色圖像(Indexd Color)

  • 像素:數(shù)字圖像是由有限個元素(采樣點)組成的艇拍,每個元素都有一個特定的位置和幅值狐蜕,這些元素稱為圖像元素(picture element),簡稱像素(pixel)卸夕。

  • 圖像的表示:一幅M×N個像素的數(shù)字圖像层释,其像素灰度值可以用M行、N列的數(shù)組或矩陣表示快集,這樣數(shù)字圖像中的像素與二維數(shù)組中的每個元素便一一對應(yīng)起來贡羔。

圖量化矩陣.jpg
  • 圖像的坐標(biāo)系

    圖像坐標(biāo)系.jpg
  • 數(shù)字圖像處理(Digital Image Processing)廉白,就是利用數(shù)字計算機對圖像進(jìn)行去除噪聲、增強乖寒、復(fù)原猴蹂、分割、特征提取楣嘁、識別等處理的理論磅轻、方法和技術(shù)。
  • DPI(Dots Per Inch逐虚,每英寸點數(shù))是一個量度單位聋溜,用于點陣數(shù)碼影像,指每一英寸長度中叭爱,取樣勤婚、可顯示或輸出點的數(shù)目。

數(shù)字圖像的視覺質(zhì)量參數(shù)

  • 灰度級:表示像素明暗程度的整數(shù)量范圍如:像素的取值范圍為0-255涤伐,就稱該圖像為256個灰度級的圖像
  • 灰度層次:表示圖像實際擁有的灰度級的數(shù)量.例如:具有32種不同取值的圖像馒胆,可稱該圖像具有32個層次,圖像數(shù)據(jù)的實際層次越多凝果,視覺效果就越好祝迂。
  • 亮度:圖像中每個像素的明暗程度取決于其灰度值的大小,圖像的整體亮度則取決于所有像素的平均灰度值器净。
  • 對比度:一幅圖像中最高和最低灰度級間的灰度差型雳。當(dāng)一幅圖像中像素可感知的數(shù)值有高的動態(tài)范圍時,認(rèn)為該圖像具有高的對比度山害。
  • 動態(tài)范圍:圖像系統(tǒng)中最大可度量灰度與最小可檢測灰度之比纠俭。灰度跨越的值域非正式地稱為動態(tài)范圍浪慌。

圖像讀取冤荆,顯示,保存权纤,類型轉(zhuǎn)換

  1. 讀取圖片
    在OpenCV中使用cv2.imread()函數(shù)來加載圖片钓简,該函數(shù)的形式如下:
cv2.imread(path, flags)

參數(shù)意義如下:

  • path: 該參數(shù)制定圖片的路徑,可以使用相對路徑汹想,也可以使用絕對路徑外邓;
  • flags:指定以何種方式加載圖片,有三個取值:
    cv2.IMREAD_COLOR:讀取一副彩色圖片古掏,圖片的透明度會被忽略损话,默認(rèn)為該值,實際取值為1槽唾;
    cv2.IMREAD_GRAYSCALE:以灰度模式讀取一張圖片丧枪,實際取值為0
    cv2.IMREAD_UNCHANGED:加載一副彩色圖像光涂,透明度不會被忽略。

如果給定的圖片路徑不對豪诲,該函數(shù)不會拋出異常,而是返回一個None挂绰,如果給定正確的圖片路徑屎篱,將返回一個[height, width, channel]的numpy.ndarray對象,height表示圖片高度葵蒂,width表示圖片寬度交播,channel表示圖片的通道。

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

cv2.imshow("image", img) # 顯示圖片践付,后面會講解
cv2.waitKey(0) #等待按鍵
lena.jpg
  1. 顯示圖片
    使用cv2.imshow()函數(shù)在一個窗口中顯示圖片秦士,這個窗口自適應(yīng)圖片的大小,其形式如下:
cv2.imshow(winname, mat)

參數(shù)意義如下:

  • winame:一個字符串,表示創(chuàng)建的窗口名字永高,每一個窗口必須有一個唯一的名字隧土;
  • mat:是一個圖片矩陣,numpy.ndarray類型

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

  • cv2.waitKey()
  • cv2.destroyAllWindows()
  • cv2.destroyWindow()
  • cv2.namedWindow()
    因為我們的程序是順序執(zhí)行,如果沒有cv2.waitKey()函數(shù)饲宛,圖像不會顯示(也許是一閃而過皆愉,我們?nèi)搜塾^察不到),cv2.waitKey()函數(shù)是一個鍵盤綁定函數(shù)(相當(dāng)于讓程序在這里掛起暫停執(zhí)行)艇抠,他接受一個單位為毫秒的時間幕庐,它等待指定時間的鍵盤事件,在指定時間內(nèi)發(fā)生了鍵盤事件家淤,程序繼續(xù)執(zhí)行异剥,否則必須等到時間結(jié)束才能繼續(xù)執(zhí)行,參數(shù)如果為0表示等待無限長的事件絮重。

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

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

下面是一個窗口可以放大縮小的顯示圖片的例子:

import cv2

img = cv2.imread('attractive-beautiful-beauty-2267088.jpg')
cv2.namedWindow('image',cv2.WINDOW_NORMAL)
cv2.imshow('image', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
縮放顯示圖像.jpg
  1. 保存圖片
    使用cv2.imwrite()函數(shù)來保存圖片亮蛔,形式如下:
cv2.imwrite(filename, img)

參數(shù)意義如下:

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

完整的例子:

import cv2

img = cv2.imread('lena.jpg',0)
cv2.imshow('image',img)
k = cv2.waitKey(0)
if k == 27:         # 按下esc時,退出
    cv2.destroyAllWindows()
elif k == ord('s'): # 按下s鍵時保存并退出
    cv2.imwrite('lena001.png',img)
    cv2.destroyAllWindows()
lena001.png

4.圖像屬性

圖像的屬性包括:行擎厢,列究流,通道辣吃,圖像數(shù)據(jù)類型,像素數(shù)目等

在opencv中芬探,圖像不是傳統(tǒng)的RGB顏色通道神得,而是按BGR順序存儲的。

img_BGR = cv2.imread('citrus-fruit-colorful-delicious-2146386.jpg') 
print(type(img_BGR)) # numpy.ndarray類型可以用numpy對圖像進(jìn)行各種操作
print(img_BGR.dtype) # 圖像數(shù)據(jù)類型偷仿,一張圖片的像素值范圍是[0,255], 因此默認(rèn)類型是unit8
print(img_BGR.shape[0]) # 行
print(img_BGR.shape[1]) # 列
print(img_BGR.shape[2]) # 通道
print(img_BGR.size) # 像素數(shù)目
print(img_BGR.max()) # 最大像素值
print(img_BGR.min()) # 最小像素值
print(img_BGR.mean()) #素值平均值
<class 'numpy.ndarray'>
uint8
4864
3648
3
53231616
255
0
211.1315848273327

5.轉(zhuǎn)換函數(shù)

使用cv2.cvtColor()函數(shù)來轉(zhuǎn)換圖片顏色空間哩簿,形式如下:

cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) # 將BGR圖像轉(zhuǎn)換為灰度圖像

其中最常用的還有:

  • cv2.COLOR_BGR2RGB # 將BGR圖像轉(zhuǎn)換為RGB圖像
  • cv2.COLOR_BGR2GRAY # 將BGR圖像轉(zhuǎn)換為灰度圖像
  • cv2.COLOR_GRAY2BGR # 將灰度圖像轉(zhuǎn)換為BGR圖像

例子:lena 真彩色圖像轉(zhuǎn)為灰度圖像

import cv2

img = cv2.imread('lena.jpg')
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
cv2.imwrite('gray_lena.jpg',gray)
gray_lena.jpg

例子:顏色轉(zhuǎn)換

import cv2

img_BGR = cv2.imread('citrus-fruit-colorful-delicious-2146386.jpg') 
cv2.imwrite('img_BGR.jpg',img_BGR)

img_RGB = cv2.cvtColor(img_BGR, cv2.COLOR_BGR2RGB)
cv2.imwrite('img_RGB.jpg',img_RGB)

img_GRAY = cv2.cvtColor(img_BGR, cv2.COLOR_BGR2GRAY)
cv2.imwrite('img_GRAY.jpg',img_GRAY)

img_HSV = cv2.cvtColor(img_BGR, cv2.COLOR_BGR2HSV)
cv2.imwrite('img_HSV.jpg',img_HSV)

img_YcrCb = cv2.cvtColor(img_BGR, cv2.COLOR_BGR2YCrCb)
cv2.imwrite('img_YcrCb.jpg',img_YcrCb)

img_HLS = cv2.cvtColor(img_BGR, cv2.COLOR_BGR2HLS)
cv2.imwrite('img_HLS.jpg',img_HLS)

img_XYZ = cv2.cvtColor(img_BGR, cv2.COLOR_BGR2XYZ)
cv2.imwrite('img_XYZ.jpg',img_XYZ)

img_LAB = cv2.cvtColor(img_BGR, cv2.COLOR_BGR2LAB)
cv2.imwrite('img_LAB.jpg',img_LAB)

img_YUV = cv2.cvtColor(img_BGR, cv2.COLOR_BGR2YUV)
cv2.imwrite('img_YUV.jpg',img_YUV)

繪圖3.jpg.jpeg

參考資料:
網(wǎng)址:https://www.aiuai.cn/aifarm365.html
書籍:《數(shù)字圖像處理》《OpenCV-Python 中文教程》

最后編輯于
?著作權(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
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來敞恋,“玉大人挪钓,你說我怎么就攤上這事《耍” “怎么了碌上?”我有些...
    開封第一講書人閱讀 165,417評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長浦徊。 經(jīng)常有香客問我馏予,道長,這世上最難降的妖魔是什么盔性? 我笑而不...
    開封第一講書人閱讀 58,868評論 1 295
  • 正文 為了忘掉前任霞丧,我火速辦了婚禮,結(jié)果婚禮上冕香,老公的妹妹穿的比我還像新娘蛹尝。我一直安慰自己,他們只是感情好悉尾,可當(dāng)我...
    茶點故事閱讀 67,892評論 6 392
  • 文/花漫 我一把揭開白布突那。 她就那樣靜靜地躺著,像睡著了一般构眯。 火紅的嫁衣襯著肌膚如雪愕难。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,692評論 1 305
  • 那天,我揣著相機與錄音猫缭,去河邊找鬼葱弟。 笑死,一個胖子當(dāng)著我的面吹牛猜丹,可吹牛的內(nèi)容都是我干的芝加。 我是一名探鬼主播,決...
    沈念sama閱讀 40,416評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼射窒,長吁一口氣:“原來是場噩夢啊……” “哼藏杖!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起轮洋,我...
    開封第一講書人閱讀 39,326評論 0 276
  • 序言:老撾萬榮一對情侶失蹤制市,失蹤者是張志新(化名)和其女友劉穎抬旺,沒想到半個月后弊予,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,782評論 1 316
  • 正文 獨居荒郊野嶺守林人離奇死亡开财,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,957評論 3 337
  • 正文 我和宋清朗相戀三年汉柒,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(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
  • 正文 我出身青樓渔肩,卻偏偏與公主長得像,于是被迫代替她去往敵國和親拇惋。 傳聞我的和親對象是個殘疾皇子周偎,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,044評論 2 355

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