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
...