Ответ 1
В OpenCV и Matplotlib существует небольшая разница в упорядочении пикселей.
OpenCV следует за порядком BGR, в то время как matplotlib, вероятно, следует за порядком RGB.
Поэтому, когда вы показываете изображение, загруженное в OpenCV, используя функции pylab, вам может потребоваться преобразовать его в режим RGB. (Я не уверен, есть ли какой-либо простой метод). Ниже продемонстрируйте это:
import cv2
import numpy as np
import matplotlib.pyplot as plt
img = cv2.imread('messi4.jpg')
b,g,r = cv2.split(img)
img2 = cv2.merge([r,g,b])
plt.subplot(121);plt.imshow(img) # expects distorted color
plt.subplot(122);plt.imshow(img2) # expect true color
plt.show()
cv2.imshow('bgr image',img) # expects true color
cv2.imshow('rgb image',img2) # expects distorted color
cv2.waitKey(0)
cv2.destroyAllWindows()
NB: Пожалуйста, отметьте комментарий @Amro ниже для лучшего способа преобразования между BGR и RGB. img2 = img[:,:,::-1]
. Очень просто.
Запустите этот код и просмотрите разницу в результатах самостоятельно. Ниже я получил:
Использование Matplotlib:
Использование OpenCV: