Python – OpenCV教學,圖像基本處理(取得像素,顏色分析,shape, channel, size, 顏色分割與組合)

應用篇

這篇文章是要介紹下面幾個技巧。

  • 像素(畫素)取得及更改方式
  • 圖像情報取得(shape, channel, 圖像的data型, size(像素數量))
  • 圖像顏色分割與組合

取得像素與更改像素資訊

首先我們先來讀取一張彩色照片。

import numpy as np
import cv2

img = cv2.imread('messi.jpeg')

接著只要指定想要取得的像素的座標就可以了。如果是彩色的圖片的話可以取得BGR的像素成分,如果是黑白照片的話可以取得他的明亮度。

px = img[88, 99]
print(px) #[32, 31, 47]

# 只取得藍色
blue = img[88, 99, 0]  # []中的第0項
print(blue) # 32

另外,只要用相同的方式就可以改變該像素的成分。

img[88, 99] = [255, 255, 255]
print(img[88, 99]) #[255, 255, 255]

除了上述的方式之外,還可以使用numpy中的item()來取得像素值,並且用itemset()來改變像素值,如果有興趣的話可以看看下面的code。

#取得紅色值
px = img.item(88, 99, 2)
print(px)

#更改紅色像素值
img.itemset((88, 99, 2), 211)
px = img.item(88, 99, 2)
print(px)

取得圖像情報

在這邊我們會學到如何取得圖像的情報,這裡指的情報是shape, channel, size(總像素數), 像素等等。

圖像的形狀可以透過img.shape()來取得,會return行數,列數以及channel數(如果是彩色圖像時)的turple圖像的形狀可以透過img.shape()來取得,會return行數,列數以及channel數(如果是彩色圖像時)的tuple。

print(img.shape) # (342, 548, 3)

另外,如果是黑白圖像時他不會return一個tuple值,只會return行數跟列數。因此這也是用來判斷圖像是不是黑白圖像的方式。

總像素數的話可以用img.size()來查詢。

print(img.size())
# 562248

圖像的data type則是可以用img.dtype來查詢。

print(img.dtype())
# unit8

顏色分割與組合

如果有必要的話可以將圖像的藍,綠,紅的成分分割,另外也可以將分割的顏色再組合起來。

b, g, r = cv2.split(img) #顏色分割
img = cv2.merge((b, r, g)) #顏色組合

或是也可以像下面這樣只取出特定的顏色。

b = img[:, :, 0] # 藍色

在這邊要注意的是cv2不是拿來計算的library,因此在處理cv2.split()的計算時會需要很龐大的時間,如果不是必要的話不推薦使用。Numpy的話在計算方面比較有效率,如果可能的話可以用Numpy。

留言