上一篇提到利用cv2.inRangex
,建立遮罩來過濾出紅球。這次我們稍微更動一下程式碼,將紅球變顏色。
[OpenCV][Python]利用cv2.inRange搭配cv2.bitwise_and過濾紅球
將紅球改變顏色成籃球
import cv2
import numpy as np
# 讀取圖像 預設讀取BGR
image = cv2.imread('D:/CRABpy/write/RGB.png')
result = image.copy()
# 設定 RGB 顏色範圍
# 這裡設置的是遮罩範圍
lower_bound = np.array([0, 0, 100])
upper_bound = np.array([50, 50, 255])
# 遮罩
mask = cv2.inRange(image, lower_bound, upper_bound)
# 將遮罩應用於原圖像,替換掉顏色
result[mask > 0] = [255,0,0]
# 顯示結果
cv2.imshow('Original Image', image)
cv2.imshow('Mask', mask)
cv2.imshow('result Image', result)
cv2.waitKey(0)
result[mask > 0] = [255,0,0]
將 result
影像中對應於 mask
影像中值大於 0 的所有像素的顏色更改為紅色(即 [255, 0, 0]
)
假設有一個 mask
陣列如下:
codemask = [
[0, 1, 0],
[1, 1, 0],
[0, 0, 1]
]
還有一個 result
影像陣列:
coderesult = [
[[0, 0, 0], [0, 0, 0], [0, 0, 0]],
[[0, 0, 0], [0, 0, 0], [0, 0, 0]],
[[0, 0, 0], [0, 0, 0], [0, 0, 0]]
]
執行 result[mask > 0] = [255, 0, 0]
之後, result
變為:
coderesult = [
[[0, 0, 0], [255, 0, 0], [0, 0, 0]],
[[255, 0, 0], [255, 0, 0], [0, 0, 0]],
[[0, 0, 0], [0, 0, 0], [255, 0, 0]]
]
也就是說, mask
中大於 0 的位置的像素在 result
中被更改為紅色 [255, 0, 0]
。