img[::-1,:,:]、img[:,::-1,:]、img[:,:,::-1]是啥?

如果使用了opencv读取图像作为网络的输入时,经常能够看到 img = img[:,:,::-1] 的一行代码。
原因是opencv读取图像时,图片的颜色通道为 GBR,为了与原始图片的RGB通道同步,需要转换颜色通道。
img = img[:,:,::-1] 便能达到该效果。或者直接用:cv2.COLOR_BGR2RGB
当使用PIL或者scipy读取图片,就不会出现这种问题,也就不需要转换颜色通道了。
三种读取图片的方式比较

import cv2
import scipy.misc
from PIL import Image
import numpy as np

img_s = scipy.misc.imread('bicycle.jpg')
print('sci',img_s[0,0])

img_p = Image.open('bicycle.jpg')
img_p = np.array(img_p)
print('PIL',img_p[0,0])

img_cv = cv2.imread('bicycle.jpg')
print('cv2',img_cv[0,0])

'''
sci [131 171 230]
PIL [131 171 230]
cv2 [230 171 131]

'''

可以看到,opencv 读取的图片通道顺序与其余两种方式不一致。

img[:,::-1,:] 水平翻转
img[::-1,:,:] 上下翻转

import cv2
img = cv2.imread('bicycle.jpg')
img_bgr = img[:,:,::-1]
img_horizontalflip = img[:,::-1,:]
img_verticalflip = img[::-1,:,:]

cv2.imshow('rgb',img)
cv2.imshow('bgr',img_bgr)
cv2.imshow('horizontalflip',img_horizontalflip)
cv2.imshow('verticalflip',img_verticalflip)

cv2.waitKey()

img[::-1,:,:]、img[:,::-1,:]、img[:,:,::-1]是啥?_第1张图片

你可能感兴趣的:(玩转代码,opencv,cv2)