あなたの質問は具体的にはレベル2について尋ねているようです。しかし、レベル2以上についてはどうですか。したがって、任意のレベルの色をポスタライズできるコードを以下に追加しました。
import numpy as np
import cv2
im = cv2.imread('messi5.jpg')
n = 2 # Number of levels of quantization
indices = np.arange(0,256) # List of all colors
divider = np.linspace(0,255,n+1)[1] # we get a divider
quantiz = np.int0(np.linspace(0,255,n)) # we get quantization colors
color_levels = np.clip(np.int0(indices/divider),0,n-1) # color levels 0,1,2..
palette = quantiz[color_levels] # Creating the palette
im2 = palette[im] # Applying palette on image
im2 = cv2.convertScaleAbs(im2) # Converting image back to uint8
cv2.imshow('im2',im2)
cv2.waitKey(0)
cv2.destroyAllWindows()
このコードは、Numpy のパレット メソッドと呼ばれるメソッドを使用しています。これは、ピクセルを繰り返し処理するよりも高速です。コードを高速化するために使用する方法の詳細については、こちらを参照してください: Fast Array Manipulation in Numpy
以下は、さまざまなレベルで得られた結果です。
元の画像:
レベル2 :
レベル 4 :
レベル 8 :
等々...