2017-08-14 1 views
1

OpenCV verwendet die BGR-Codierung und img[...,::-1] vertauscht die roten und blauen Achsen von img, wenn ein Bild im häufigeren RGB-Format vorliegen muss. Ich benutze es seit einigen Monaten und verstehe immer noch nicht, wie es funktioniert.Wie funktioniert [..., :: - 1] in Slice-Notation?

+0

Mögliches Duplikat (https://stackoverflow.com/questions/34085912/reversing-a-list-slice-in-python) – DyZ

+0

ziemlich sicher, dass opencv verwendet [eine Liste Scheibe in Python Umkehren] [numpy arrays] (https://docs.scipy.org/doc/numpy/reference/arrays.indexing.html#basic-slicing-and-indexing) für das Bild: die Ellipsen sind Abkürzungen für alle Achsen, die * passen * in diesem Kontext - und das ':: - 1' kehrt die Zeilen in einem 2-d-Array um. – wwii

Antwort

1

Der Slice-Operator arbeitet wie mit 3 Parametern. Start (inklusive), Ende (exklusiv) und Schritt. Wenn Start nicht angegeben ist, erhält es den Anfang des Arrays, gleich mit dem Ende aber mit dem letzten Element. Wenn der Schritt den Standard keine Angabe 1. ist

diese Weise, wenn Sie [1, 2, 3, 4][0:2] tun es [1, 2]

zurückkehren Wenn Sie [1, 2, 3, 4][1:] tun es [2, 3, 4]

zurückkehren Wenn Sie [1, 2, 3, 4][1::2] tun es [2, 4]

zurückkehren

Für negative Indizes bedeutet das Iterieren rückwärts, so dass [1, 2, 3, 4][::-1] sagt, vom Startelement bis zum letzten Element die Liste 1 Element nacheinander durchlaufen,zurückgeben.

Da die Frage nicht ganz klar ist, hoffe ich, dass dies die Funktionsweise aufhebt und Sie zu einer Antwort bringt.

1

img[...,::-1] die Reihenfolge der 3 R umkehrt, G, B-Komponenten des Bildes

hier ist ein numerisches Beispiel

import numpy as np 

#define 2x2x3 matrix with random numbers 
A = np.random.randint(0,10,(2,2,3)) 
print(A) 
#output 
array([[[0, 1, 7], 
     [9, 6, 6]], 

     [[8, 2, 2], 
     [7, 9, 4]]]) 
#print the third 2x2 component of A (corresponding to B in RGB) 
print(A[:,:,2] 
#output is 
array([[7, 6], 
     [2, 4]]) 

nun die dritte Dimension der Matrix Umkehren wird 0 (R) tauschen mit 2 (B) und halten 1 (G) unverändert

RA =A[:,:,::-1] 

print(RA) 
#output is 
array([[[7, 1, 0], 
     [6, 6, 9]], 

     [[2, 2, 8], 
     [4, 9, 7]]]) 

#here is the first 
print(RA[:,:,0]) 
#output is as expected the same as A[:,:,2], i.e. R and B were swapped 
array([[7, 6], 
     [2, 4]]) 

PS. [:,:,1] ist die gleiche wie [...,1]

Verwandte Themen