J'ai eu l'occasion d'extraire la couleur (RVB) utilisée de l'image, c'est donc un mémo.
Langue, package | version |
---|---|
Python | 3.7.4 |
numpy | 1.16.4 |
OpenCV | 3.4.2 |
lena.jpg
Vérifiez l'image à utiliser.
import cv2
import numpy as np
bgr_array = cv2.imread('lena.jpg')
print(bgr_array.shape)
# (512, 512, 3)
Lors de l'importation d'images à l'aide d'OpenCV, les couleurs sont dans l'ordre ** BGR **. Par conséquent, l'image est que trois matrices ** B **, ** G **, ** R ** de 512 x 512 sont alignées.
Par exemple, obtenez la valeur BGR en haut à gauche ci-dessous.
print(bgr_array[0, 0, :])
# [128 138 225]
Avec la méthode ci-dessus, il est nécessaire d'acquérir la valeur BGR 512 x 512 fois. Créez la matrice suivante pour un fonctionnement efficace.
\left[
\begin{array}{rrr}
b_{0} & g_{0} & r_{0} \\
\vdots & \vdots & \vdots \\
b_{n} & g_{n} & r_{n}
\end{array}
\right]
Où «n = 512 * 512-1». Ensuite, nous extrairons les valeurs uniques dans le sens des lignes.
reshaped_bgr_array = bgr_array.reshape(512*512, 3)
# axis=Spécifiez l'unicité de la ligne avec 0
unique_bgr_array = np.unique(reshaped_bgr_array, axis=0)
#Liste des valeurs bgr uniques
print(unique_bgr_array)
"""
[[ 29 14 76]
[ 31 11 86]
[ 31 27 146]
...
[224 175 191]
[224 180 197]
[225 247 253]]
"""
#Nombre de valeurs bgr uniques
print(len(unique_bgr_array))
# 73852
#Rapport entre la valeur bgr unique et le nombre total de pixels
print(len(unique_bgr_array)/(512*512))
# 0.2817230224609375
Le code ci-dessus dépend de la taille de l'image, alors faites-en une fonction afin qu'elle puisse être réutilisée.
def extract_unique_color(img_path, rgb=False):
bgr_array = cv2.imread(img_path)
row, col, _ = bgr_array.shape
reshaped_bgr_array = bgr_array.reshape(row * col, 3)
unique_color_array = np.unique(reshaped_bgr_array, axis=0)
if rgb:
#Trier les éléments dans RVB
unique_color_array = unique_color_array[:, [2, 1, 0]]
return unique_color_array
J'ai présenté comment extraire des couleurs uniques dans l'image.
Recommended Posts