我有一個色階的影像

我通過使用過濾掉實際的色階
import cv2
import numpy as np
colorbar = cv2.imread('colorbar-scheme-elevation.png', cv2.IMREAD_UNCHANGED)
colorbar = cv2.cvtColor(colorbar, cv2.COLOR_BGRA2BGR)
hsv = cv2.cvtColor(colorbar, cv2.COLOR_RGB2HSV)
lower_gray = np.array([0, 0, 0])
upper_gray = np.array([255, 10, 255])
mask = cv2.inRange(hsv, lower_gray, upper_gray)
mask = cv2.bitwise_not(mask)
res = cv2.bitwise_and(colorbar, colorbar, mask=mask)
gray = cv2.cvtColor(res, cv2.COLOR_RGB2GRAY)
ret, thresh = cv2.threshold(gray, 10, 255, 0)
contours, hierarchy = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)
c = max(contours, key=cv2.contourArea)
x, y, w, h = cv2.boundingRect(c)
ROI = colorbar[y:y h, x:x w]
最終結果如下所示:

接下來,我只需要一行
ROI = ROI[0]
所有獨特的顏色都可以使用
unique_colors = list(reversed(np.unique(ROI, axis=0)))
如何使用獨特的顏色值重新創建色標?
uj5u.com熱心網友回復:
您可以從顏色串列開始創建一個 Matplotlib 顏色圖ListedColormap(請注意,我沒有考慮您的最后兩個命令):
from matplotlib.colors import ListedColormap
cmap = ListedColormap(ROI[0].astype(float) / 255)
uj5u.com熱心網友回復:
您可以創建單行ROI:
single_row_ROI = ROI[0:1,:]
所有獨特的顏色都可以放入一個串列中:
colormap_list = single_row_ROI[0].tolist()
包含前 10 種顏色的串列:
>>> colormap_list[:10]
[[238, 135, 123], [237, 135, 123], [238, 136, 123], [238, 135, 123], [238, 135, 123], [237, 136, 123], [237, 135, 123], [237, 135, 123], [237, 136, 123], [237, 136, 123]]
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/484525.html
標籤:opencv matplotlib
上一篇:維納濾波器輸出看起來不夠好
下一篇:影像處理,獲得純邊緣
