[英]How to find pixel color in image?
我正在嘗試制作黑白面具。 下圖有椅子的黃色面具。 我把它變成白色,其他一切都變成黑色。 我使用了這種顏色 [220, 211, 81] 作為蒙版。 如果我發現這個像素顏色,它表明沒有這樣的東西。 我究竟做錯了什么? 代碼:
import cv2
color_to_seek = [220, 211, 81]
original = cv2.imread('image.png')
original = cv2.cvtColor(original, cv2.COLOR_BGR2RGB)
amount = 0
for x in range(original.shape[0]):
for y in range(original.shape[1]):
r, g, b = original[x, y]
if (r, g, b) == color_to_seek:
amount += 1
print(amount)`
圖片:
我期望黃色蒙版應該被白色像素替換,一切都是黑色的。 蒙版或像素顏色之間有區別嗎? 細化一點?
正如Christoph Rackwitz所指出的,使用確切的顏色值可能不是提取蒙版的最佳方法。
使用范圍進行顏色比較並使用具有單獨亮度和顏色通道(例如 HSV 或 LAB)的顏色空間可以改善結果:
您可能需要為您的特定應用找到具有可接受數量的誤報/漏報的閾值。
例子:
import cv2
import numpy as np
image = cv2.imread('room.png')
color_to_seek_rgb = np.array([142, 140, 60])
color_to_seek_hsv = cv2.cvtColor(color_to_seek_rgb.reshape(1, 1, 3).astype(np.uint8), cv2.COLOR_BGR2HSV).flatten()
image_hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
# using lower values for H channel as it encodes luminance not a color information
lower_bound = color_to_seek_hsv - [10, 20, 20]
upper_bound = color_to_seek_hsv + [10, 20, 20]
mask = cv2.inRange(image_hsv, lower_bound, upper_bound)
cv2.imwrite("mask.jpg", mask)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.