这里有一张图片,图片名是flower.jpg
在图像处理时,如果需要展示图片,我们可以使用 opencv 读取与展示,也可以使用 matplotlib 进行读取和展示。但是 opencv 读取彩色图像的方式却并不是 RGB 的方式,opencv 默认是以 BGR 的形式进行读取的(这其中的历史原因似乎和相机有关,大家可以查阅相关资料)。
下面是 opencv 和 matplotlib 的读取图片的方式
import cv2 as cv
import matplotlib.pyplot as plt
#opencv
imgA = cv.imread("flower.jpg",1)
# matplotlib
imgB = plt.imread("flower.jpg")
使用同一种模块读取和展示,效果是一样的。这里提及的区别主要是 imgA 和imgB 的存储方式不同。
opencv 存储的 imgA:
matplotlib 存储的 imgB:
可以看出 imgA 和 imgB 都是三维矩阵,最内层的三个元素分别是我们常说的“ RGB ”,而 opencv 和 matplotlib 是反过来的,使用的是 BGR 。
如果我们想将opencv 的图像转换为 RGB 的形式并展示,可以参考下面几种方法。
import cv2 as cv
import matplotlib.pyplot as plt
img = cv.imread("flower.jpg", 1)
b, g, r = cv.split(img) #通道分离
img = cv.merge([r, g, b]) #改序合并
plt.imshow(img)
plt.show()
结果如图:
import cv2 as cv
import matplotlib.pyplot as plt
img = cv.imread("flower.jpg", 1)
img = cv.cvtColor(img, cv.COLOR_BGR2RGB) #颜色通道转换
plt.imshow(img)
plt.show()
numpy 数组也是可以使用切片访问的,并且 img 也是 numpy 数组。
import cv2 as cv
import matplotlib.pyplot as plt
img = cv.imread("flower.jpg", 1)
img = img[:,:,::-1] #色彩是第三个维度,::-1 表示矩阵的逆序全访问
plt.imshow(img)
plt.show()