Что делает оператор среза img [:,:, :: - 1] с изображениями? - PullRequest
0 голосов
/ 19 марта 2020

Я новичок в обработке изображений и наткнулся на блог, в котором демонстрируется использование оператора среза для переворачивания изображения, которое мне требуется для задачи машинного обучения.

Я пытался реализовать то же самое, читая 3-канальные изображения с использованием OpenCV, как показано ниже, и это не работает, как ожидалось!

Все, что делает оператор среза, это преобразование изображения BGR в RGB-изображение (без переворота!).

import cv2
from matplotlib import pyplot as plt
%matplotlib inline

img = cv2.imread('path_to_image')
img = img[:,:,::-1]
plt.imshow(img)
plt.show()

Чего мне здесь не хватает ???

1 Ответ

2 голосов
/ 20 марта 2020

Вы нарезали не ту часть массива изображений.

Изображения состоят из значений X, Y и BGR. Нарезая последний индекс, вы только инвертировали значения BGR в RGB.

. Чтобы отразить изображение, необходимо поменять местами либо X, либо Y, которые являются индексами на 0 и 1. изображения - индекс 2 равен RGB:

img = img[:    ,:    ,::-1]  # reverses BGR to RGB, keeps x and y as is

Вместо этого вы делаете

img = img[:    ,::-1 ,:   ]  # reverses the x coords - mirror on x
img = img[::-1 ,:    ,:   ]  # reverses the y coords - mirror on y

et c.

BGR:

BGR

RGB: img1 = img[:, :, ::-1]

RGB

FLIP Y: img1 = img[::-1, :, ::-1]

FLIP Y

FLIP X: img1 = img[:, ::-1, ::-1]

FLIP X

FLIP X, Y : img1 = img[::-1, ::-1, ::-1]

FLIP X+Y

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...