opencv python чтение изображения как RGB - PullRequest
0 голосов
/ 29 апреля 2020

Можно ли открыть opencv (используя python) по умолчанию для чтения изображения в порядке RGB? в документации opencv метод imread возвращает изображение как порядок BGR, но в коде методы imread возвращают изображение как порядок RGB? Я не делаю какой-либо процесс преобразования. Просто использовал непрочитанные методы и покажи на экране. Это показывает, как на windows просмотра изображений. Является ли это возможным ?

РЕДАКТИРОВАТЬ 1: мой код указан ниже. Методы cv.imshow () слева и другие методы plt.imshow (). Методы

cv2.imshow () показывают изображение как RGB, а plt - как чтение opencv (BGR) изображения.

image_file = 'image/512-2-1001-18-RGB.jpg'
# img = imp.get_image(image_file)

img = cv2.imread(image_file)
plt.imshow(img)
plt.show()

cv2.imshow('asd', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

enter image description here

РЕДАКТИРОВАТЬ 2: Некоторые методы opencv imshow показывают изображение как RGB ниже. Я прикрепил значение первого пикселя изображения и следующего изображения - значения пикселей в фотошопе

enter image description here

enter image description here

РЕДАКТИРОВАТЬ 3 : ниже только при чтении изображения и с imshow, а второе изображение - оригинальное RGB-изображение.

после того, как метод imshow выглядит так же, как исходное изображение, и это меня смутило

enter image description here

Исходное изображение в порядке RGB.

enter image description here

1 Ответ

3 голосов
/ 29 апреля 2020

OpenCV полностью соответствует самому себе. Он считывает изображения в массивы Numpy с каналами в порядке BGR, сохраняет изображения в порядке BGR, а его cv2.imshow() и cv2.imwrite() также ожидают изображения в порядке BGR. Все ваши файлы JPEG / PNG / BMP / TIFF остаются на диске в обычном порядке RGB.

Другие библиотеки, такие как PIL / Pillow , scikit-image , matplotlib , pyvips хранит изображения в обычном порядке RGB в памяти.

Таким образом, вы получите проблемы с цветом только в том случае, если вы смешаете OpenCV с любым другая библиотека. Если вы go от / до OpenCV от любого другого, вам нужно будет изменить порядок каналов. В любом случае это тот же процесс, вы меняете первый и третий каналы:

RGBimage = BGRimage[...,::-1]

или

BGRimage = RGBimage[...,::-1]

Или вы можете использовать OpenCV cvtColor() чтобы выполнить преобразование:

RGBimage = cv2.cvtColor(BGRimage, cv2.COLOR_BGR2RGB)

Вам не обязательно каждый раз делать целую копию в новой переменной. Скажем, вы читаете изображение с OpenCV , в порядке OpenCV BGR, очевидно, и вы хотите кратко отобразить его с помощью matplotlib, вы можете просто повернуть каналы по мере прохождения :

# Load image with OpenCV and process in BGR order
im = cv2.imread(something)

# Briefly display with matplotlib, which will want RGB order
plt.imshow(img[...,::-1])
plt.show()

# Carry on processing in BGR order with OpenCV
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...