簡體   English   中英

如何在圖像中找到像素顏色?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM