OpenCV學習系列:
阿新 • • 發佈:2018-11-05
最近需要對資料進行擴增以獲得更為豐富的資訊,就來了解一下OpenCV。以後每天會寫一點自己的學習要點:
1、對影象進行操作需要先獲取影象的畫素值矩陣,用cv2.imread('xxx.jpg')函式來獲取一個影象的畫素矩陣:
>>> import cv2
>>> import numpy as np
>>> img = cv2.imread('messi5.jpg')
如果是灰度圖片,如mnist grayscale image,則畫素矩陣的每個元素就是0~255的畫素值;如果是BGR彩色影象,則每個位置是一個[blue,green,red]的陣列。
>>> px = img[100,100]
>>> print px
[157 166 200]
# accessing only blue pixel
>>> blue = img[100,100,0]
>>> print blue
157
# accessing RED value
>>> img.item(10,10,2)
59
# modifying RED value
>>> img.itemset((10,10,2),100)
>>> img.item(10,10,2)
100
2、獲取影象屬性:“知己知彼,方能百戰百勝”——如果一開始我們不瞭解這個影象的情況可能後面的操作就沒法進行,比如影象的行數(高)、列數(寬),影象的資料型別、畫素數量等等;影象的shape可以直接用img.shape 得到,返回一個由行數和列陣列成的元組,如果是BGR影象還會顯示通道數“3”,即變成了三元組:
>>> print img.shape
(342, 548, 3)
>>> print img.size # number of pixels
562248
>>> print img.dtype # image datatype
uint8
3.分離、合併影象通道:
有時候我們需要只在影象的某一通道進行操作,就需要把那一通道的畫素值提取出來:
>>> b,g,r = cv2.split(img) >>> img = cv2.merge((b,g,r)) 或者: >>> b = img[:,:,0] 或者你想讓所有的red pixels值為0: >>> img[:,:,2] = 0 要注意的是cn2.split() 函式是一個很費時的操作,如非必要,考慮使用 Numpy indexing.
4、裁剪、移動影象的某一部分:
如圖,把足球平移到另一個文置:
>>> ball = img[280:340, 330:390]
>>> img[273:333, 100:160] = ball