提前準備
使用工具Python3.5
使用包cv2,numpy
任務1 獲取並修改像素值
讀取一副圖像,根據像素的行和列的座標獲取它的像素值,對於RGB圖像而言,返回RGB的值,對於灰度圖則返回灰度值
import cv2
import numpy
img = cv2.imread('45.jpg')
px=img[100,100]
print(px)
blue = img[100,100,0]
print(blue)
img[101,101]=[255,255,255]
print(img[101,101])
numpy是經過優化了的進行快速矩陣運算的包,所以不推薦逐個獲取像素值並修改能矩陣運算就不要用循環。
例如前5行的後3列,用numpy的array.item()和array.itemset()會更好。但是返回是標量,如果想獲得所有RGB的值,需要使用array.item()分割他們。
更好的方法是
import cv2
import numpy
img = cv2.imread('45.jpg')
print(img.item(10,10,2))
img.itemset((10,10,2),100)
print(img.item(10,10,2))
任務2 獲取圖像屬性
圖像屬性包括:行,列,通道,圖像數據類型,像素數目等
成員1:
img.shape 調用這個成員可以獲得圖像的形狀,返回值是一個包含行數,列數,通道數的元組
實例代碼:
import cv2
import numpy
img = cv2.imread('45.jpg')
print(img.shape)
如果圖像是灰度圖,返回值僅有行數和列數,所以通過檢查返回值可以判斷是灰度圖還是彩色圖
成員2:
img.size 可以返回圖像的像素數目
實例代碼:
import cv2
import numpy
img = cv2.imread('45.jpg')
print(img.size)
像素的數目=行數 x 列數 x 通道數
成員3
img.dtype返回圖像的數據類型,在debug時很重要,因爲OpenCV-Python代碼中經常出現數據類型的不一致
實例代碼:
import cv2
import numpy
img = cv2.imread('45.jpg')
print(img.dtype)
總結
(本系列每週不定期更新,謝謝大家支持!)