Skip navigation

Numpy mátrix szeletelés magyarázatok

Mit okoznak az alábbi példák?

A feladat kitűzése a Numpy tömb szeletelés részben található.

im[200:, :] = [0, 255, 255]

A 200. sortól lefelé minden sorban és oszlopban sárga lesz a képmátrix szín.

im[:, 300:, 2] = 0

A 300. oszloptól jobbra minden sorban és oszlopban 0 értékű lesz a vörös csatorna értéke, a zöld és a kék változatlan marad.

im[100:120] = 255

Itt a lényeg az, hogy az indexekkel jobbról balra haladva a teljes tartományt kihasználók elhagyhatók. Vagyis az im[100:120, :, :] helyett írható im[100:120].

Mivel a 255 értéket mindhárom csatorna értékül kapja, így fehér szín alakul ki ebben a sávban.

im[:, (im.shape[1] >> 1) - 50 : (im.shape[1] >> 1) + 50] = 220

A mátrix második dimenziója szerinti méretet (oszlopok száma) osztjuk kettővel, vagyis a középső oszloptól balra és jobbra 50 képponttal minden sorban 220 érték (világosszürke) kerül beírásra. Figyeljük meg, hogy itt ki kell írni az első dimenzió szerinti teljes tartományt (:), az most nem hagyható el.

A >> operátor a bitminta léptetés, ami a 2-vel osztás hatást okozza ebben az esetben. Azért használtuk ezt, hogy egész típusú érték maradjon az eredmény, mert a Numpy indexeléshez az kell, és nem akartunk típuskonverziót használni.

Mit látunk a kivágott képrész kapcsán?

A kivágott részkép azért változik meg, mert az im képmátrix-szal egyező területre hivatkoznak, így az im későbbi változása a im_cropped változását is magával hozza.

Az im képmátrix másik helyére bemásolt példány nem változik, mert a részkép tartomány módosítása előtti tartalom került oda bemásolásra, az ott található képpont értékek módosításával. A kivágott részképpel ekkor megszűnik a kapcsolat.