[PYTHON] Extraire la couleur de l'image (RVB)

introduction

J'ai eu l'occasion d'extraire la couleur (RVB) utilisée de l'image, c'est donc un mémo.

environnement

Langue, package

Langue, package version
Python 3.7.4
numpy 1.16.4
OpenCV 3.4.2

image

lena.jpg

Vérifiez la taille de l'image

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.

Obtenez GBR

Par exemple, obtenez la valeur BGR en haut à gauche ci-dessous.

print(bgr_array[0, 0, :])
# [128 138 225]

Redimensionnement de l'image

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

Fonctionnalisation

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

finalement

J'ai présenté comment extraire des couleurs uniques dans l'image.

Recommended Posts

Extraire la couleur de l'image (RVB)
Extraire les points caractéristiques d'une image
Créer un diagramme composite RVB 3 couleurs
Traitement d'image par Python 100 Knock # 6 Traitement de réduction de couleur
Traitement d'image 100 coups Q.6. Explication du traitement de réduction de couleur
Extraire la couleur de l'objet dans l'image avec le clustering Mask R-CNN et K-Means