RGB2BGR в opencv неправильно конвертирует цвета - PullRequest
0 голосов
/ 23 февраля 2020
pil_image = Image.open('1.png')
opencvImage = cv2.cvtColor(np.array(pil_image), cv2.COLOR_RGB2BGR)

plt.imshow(pil_image)

Любая причина, по которой COLOR_RGB2BGR не преобразует цвета правильно?

Я пытаюсь сохранить красный цвет, но он меняет его на фиолетовый.

Ответы [ 2 ]

2 голосов
/ 23 февраля 2020

Когда вы открываете изображение с помощью PIL, например:

im = Image.open('1.png')

, вы получаете изображение RGB.

Затем вы (без необходимости) преобразовали его в BGR, который OpenCV использует:

opencvimage = cvtColor()

но вы отображаете его с помощью matplotlib, который использует RGB !!!

Я сказал вам, что вы запутаете себя *


Если вы хотите отобразить изображение RGB PIL с помощью PIL:

pRGB = Image.open('1.png')  # PIL RGB
pRGB.show()

Если вы хотите отобразить изображение RGB PIL с помощью matplotlib:

pRGB = Image.open('1.png')  # PIL RGB
nRGB = np.array(pRGB)       # Numpy RGB
plt.imshow(nRGB)

Если вы хотите отобразить Изображение OpenCV с matplotlib:

nBGR = cv2.imread('1.png')
plt.imshow(nBGR[:,:,::-1])
1 голос
/ 23 февраля 2020

Это нормальная ситуация. Потому что если ваше исходное изображение имеет формат RGB, когда вы конвертируете его в BGR, конечно, порядок его каналов изменится. Так что это нормально.

Например:

if pixel of source = (12,102,53) = (R,G,B)  then this will become
                     (53,102,12) = (B,G,R)

Примечание: Вы можете проверить значения пикселей с помощью этого сайта . Просто измените порядок каналов, и вы поймете.

Здесь также обсуждается пост , который обсуждался ранее.

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