1. 程式人生 > >OpenCV-Python[第三章]——影象格式及操作方法

OpenCV-Python[第三章]——影象格式及操作方法

理解影象

影象其實就是一個2維陣列,因此可以使用行列座標對影象畫素點進行定位。對於彩色影象,每個畫素點對應的是一個包含bgr(cv2.imread讀取的影象為BGR模式)的三元素的陣列,灰度影象則每個畫素對應一個灰度值。

px = img[100,100] #access pixel
print px          #print the pilxe value    

此外,可以使用陣列的切片操作訪問影象區域(ROI)

ball = img[280:340,330:390]
img[273:333,100:160] = ball

前面提到可以使用cv2.split獲取顏色分量,在知道影象其實就是二維陣列之後,還可以使用切片操作獲取影象分量。

blue = img[:,:,0]
green = img[:,:,1]
red = img[:,:,2]

完整程式碼

import numpy as np
import cv2
import matplotlib.pyplot as plt

img = cv2.imread('messi5.jpg',1) # read as bgr color mode
px = img[100,100]
print px
ball = img[280:340,330:390]
img[273:333,100:160] = ball
b,g,r = cv2.split(img)
img2 = cv2.merge((r,g,b))

blue = img[:,:,0
] green = img[:,:,1] red = img[:,:,2] img3 = cv2.merge((red,green,blue)) cv2.imshow('image',img) plt.subplot(121);plt.imshow(img2) plt.subplot(122);plt.imshow(img3) plt.show() k = cv2.waitKey(0) if k == 27: # wait for ESC key to exit cv2.destroyAllWindows() elif k == ord('s'): # wait for
's' key to save and exit cv2.imwrite('messigray.png',img) cv2.destroyAllWindows()

補充說明

除了使用python的陣列操作訪問影象畫素,還可以使用影象的成員函式item/itemset,進行畫素的訪問與修改。但這種方法只能訪問一個畫素的一種顏色。如果是彩色影象,需要分別對bgr進行訪問與修改。

px = img.item(0,0,2) # red
print px
img.itemset((0,0,2),100)
print img.item(0,0,2)