2016-06-05 11 views
1

Ich habe ein Farbbild mit der OpenCV-Funktion importiert.Wie erhalten Sie die Pixelindizes eines bestimmten RGB-Wertes eines Bildes in Python?

im = cv2.imread('test.jpg') 

Ich suche nach den Indizes von weißen Pixeln, die einen Pixelwert von [255, 255, 255] haben. Ich weiß, dass es ein 3D-Array ist. Aber was komisch ist, ist der Wert von im [0,0] ist [255 255 255], anstatt [255, 255, 255]. Und im [0,0,0] ist 255. So [255 255 255] scheint wie eine Liste oder etwas, aber eigentlich nicht gleichwertig zu [255, 255, 255].

>>> print im[0,0] 
[255 255 255] 

>>> print im[0,0,0] 
255 

Also meine Fragen sind:

  1. Was ist der Unterschied zwischen [255 255 255] und [255, 255, 255]?
  2. Wie kann ich die Indizes aller Pixel erhalten? Welcher Suchalgorithmus sollte ich verwenden?
+0

In C++ würden Sie 'cv :: findNonZero' auf der Maske der weißen Pixel verwenden:' cv :: Mat1b Maske; cv :: inRange (img, cv :: Skalar (255,255,255), cv :: Skalar (255,255,255), Maske); Std :: Vektor Punkte; cv :: findNonZero (Maske, Punkte); '. Es sollte etwas Ähnliches auch in Python-Wrappern geben. Oder wahrscheinlich ein Shurtcut mit Numpy-Einrichtungen ... – Miki

Antwort

0

Wenn Sie die Indizes aller weißen Pixeln erhalten möchten, können Sie Ihr Bild in eine 2D-Array umwandeln und finden dann die Indizes

import operator 

image = cv2.imread("test.jpg") 
img = image.astype('float') 
img = img[:,:,0] # convert to 2D array 
row, col = img.shape 
for i in range(row): 
    for j in range(col): 
     if img[i,j] == 255: 
      x.append(i) # get x indices 
      y.append(j) # get y indices 

Beachten Sie, dass Bild [0,0] zeigt 2D-Matrix wohingegen Bild [0,0,0] eine 3D-Matrix mit 0-Farbband zeigt. Dieses Element definiert im Grunde das Farbband des Bildes. Wenn Sie kein drittes Element angeben, zeigt es Ihnen drei Werte für jedes Farbband des Bildes an. Aber wenn Sie das Farbband erwähnen, zeigt es Ihnen den genauen Pixelwert an.

HINWEIS: Das Bild muss nicht in ein 2D-Array konvertiert werden. Sie können es immer auch für das eigentliche Array tun. Ich habe es getan, um Ihnen den Algorithmus einfach zu erklären.

Verwandte Themen