Like Share Discussion Bookmark Smile

J.J. Huang   2026-01-13   Python OpenCV 02.入門篇:基礎操作   瀏覽次數:次   DMCA.com Protection Status

Python | OpenCV 圖片屬性與資訊查詢

📚 前言

在前一章我們學會了如何輸出影片。
這一篇要進一步學習 圖片屬性與資訊查詢,理解如何取得圖片的大小、通道數、型態等基本資訊,並進一步分析圖片的內容。

🖼️ 基本屬性

  • shape:圖片的維度資訊 (高度, 寬度, 通道數)
  • size:圖片的總像素數 (高度 x 寬度 x 通道數)
  • dtype:圖片的資料型態 (例如 uint8)
  • ndim:圖片的維度數量

範例程式

1
2
3
4
5
6
7
8
import cv2

img = cv2.imread("test.png")

print("Shape:", img.shape) # (高度, 寬度, 通道數)
print("Size:", img.size) # 總像素數 (高度 x 寬度 x 通道數)
print("Dtype:", img.dtype) # 資料型態
print("Ndim:", img.ndim) # 維度數量


圖:輸出圖片的基本屬性

🎨 像素操作

圖片在 OpenCV 中其實就是一個 NumPy 陣列,每個像素都對應到一組 BGR 值 (範圍 0~255)。除了查詢,我們也能直接存取或修改像素。

範例一:讀取像素顏色

1
2
3
4
5
6
7
8
9
10
11
12
13
import cv2

img = cv2.imread("image.jpg")

# 取得某個像素的 BGR 值
(b, g, r) = img[100, 200] # 位置 (y=100, x=200)
print("B:", b, "G:", g, "R:", r)

# 分離三個顏色通道
b_channel, g_channel, r_channel = cv2.split(img)
print("Blue 通道:", b_channel)
print("Green 通道:", g_channel)
print("Red 通道:", r_channel)

👉 單一像素的顏色資訊可用於顏色偵測、區域分析或影像修正;而分離通道則能針對單一顏色做進一步處理。

範例二:建立與修改像素顏色

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import cv2
import numpy as np

# 建立 4x4 全白的圖片陣列 (BGR 格式)
img = np.zeros((4, 4, 3), dtype=np.uint8)
img[:] = [255, 255, 255]

# 修改某些像素顏色
img[0, 0] = [255, 0, 0] # 左上角改成藍色
img[1, 2] = [0, 255, 0] # 第二列第三格改成綠色
img[3, 3] = [0, 0, 255] # 右下角改成紅色

print(img)

# 放大顯示 (例如放大到 400x400)
big_img = cv2.resize(img, (400, 400), interpolation=cv2.INTER_NEAREST)

cv2.imshow("test", big_img)
cv2.waitKey(0)
cv2.destroyAllWindows()


圖:建立 4x4 圖片並修改像素顏色,再放大顯示


圖:對應顯示藍、綠、紅色區塊

🔍 進階分析

除了基本屬性之外,我們也可以進一步分析圖片的內容:

  • 平均顏色:計算整張圖片的平均 BGR 值。
    👉 可用來描述圖片整體風格、判斷主色調、檢查亮度或曝光。
  • 最大值 / 最小值:找出像素的亮度範圍。
    👉 可用於影像品質檢測,判斷是否過暗或過曝。
  • 灰階直方圖:統計像素分布,常用於影像分析。
    👉 可用於亮度分析、對比度判斷、影像增強。

範例程式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import cv2
import numpy as np

img = cv2.imread("test.png")

# 平均顏色 (BGR)
mean_color = cv2.mean(img)[:3]
print("平均顏色 (BGR):", mean_color)

# 最大值與最小值
min_val, max_val, _, _ = cv2.minMaxLoc(cv2.cvtColor(img, cv2.COLOR_BGR2GRAY))
print("灰階最小值:", min_val)
print("灰階最大值:", max_val)

# 計算灰階直方圖
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
hist = cv2.calcHist([gray], [0], None, [256], [0, 256])
print("灰階直方圖:", hist[:10]) # 只顯示前 10 個 bin


圖:圖片的平均顏色與灰階直方圖

⚠️ 注意事項

  • 顏色通道:彩色圖片通常是 BGR 三通道,灰階圖片則只有一通道。
  • 資料型態:常見為 uint8,範圍 0~255。
  • 圖片大小:不同解析度會影響後續處理效能。
  • 直方圖應用:可用於亮度分析、對比度調整、影像增強等。

🎯 結語

這一篇我們學會了如何查詢圖片的基本屬性,包括大小、通道數、型態等,並進一步分析平均顏色、亮度範圍、直方圖,以及單一像素的顏色資訊。
下一篇將進一步學習 影片屬性與資訊查詢,掌握影片處理的更多技巧。


註:以上參考了
OpenCV Tutorials
OpenCV-Python Tutorials