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