簡體   English   中英

如何將某個 RGB 值分配給 Python 中一些其他 RGB 值的“最近”值

[英]how to assign a certain RGB Value to the 'nearest' of some other RGB-Values in Python

我編寫了一個代碼,它將傳入的圖片像素化為選定的像素大小。 我有一些 RGB_color 代碼(元組)的列表,我想檢查每個像素,像素顏色最接近哪種顏色。

我定義的“最近”顏色是其 R G 和 B 值的距離最低的顏色。 例如,如果我只有黑色廣告白色,顏色 (128,0,0) 將轉換為黑色,因為 0-128 + 0-0 + 0-0 = 到黑色的距離和 255-128 + 255-0 + 255 -0 = 到白色的距離。

它適用於黑色、白色和灰色。 但是當我包括例如紅色時,大多數沒有任何紅色的像素都會輸出為紅色。 你知道有什么更好的方法來聲明最接近的顏色嗎?

您當前的距離度量是r1-r2 + g1-g2 + b1-b2可以重新排列為r1+g1+b1 - (r2+g2+b2) ,或者如果brightness=r+g+b ,那么距離是brightness1 - brightness2 因此,您當前的解決方案總是說顏色最接近 colors 中具有最低brightness的那個。

一個簡單的解決方案是使用歐幾里得距離: sqrt((r1-r2)**2 + (g1-g2)**2 + (b1-b2)**2) (請注意,如果您只需要比較距離,則可以省略平方根。)

但是,RGB 顏色空間在感知上並不均勻,因此使用歐幾里得距離可能會產生一些看起來很奇怪的結果。 已經進行了多次嘗試來解決這個問題,例如 CAM02-UCS 顏色空間 - 以下是使用colorspacious模塊(使用pip安裝)進行顏色轉換和 numpy 進行歐幾里德距離計算的示例。

from colorspacious import cspace_convert
from numpy.linalg import norm as distance


a = cspace_convert([64, 128, 255], "sRGB255", "CAM02-UCS")
b = cspace_convert([64, 138, 255], "sRGB255", "CAM02-UCS")
c = cspace_convert([64, 148, 255], "sRGB255", "CAM02-UCS")
print('distance between a and b', distance(a-b))
print('distance between a and c', distance(a-c))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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