opencv与matplot显示图片通道区别

问题

对于一张lenna图,有时候显示是原始的样子:
opencv与matplot显示图片通道区别_第1张图片
但有时候显示是
opencv与matplot显示图片通道区别_第2张图片
问题是通道数顺序;对于彩色图片,一般而言是由RGB三通道组成,不同的是通道顺序的问题导致显示的颜色问题,比如RGB BGR等;

解决

这里明确一下

  • 使用cv2.imread读取图像时候,获得的图像顺序是BGR顺序
  • 使用cv2.imshow显示图像时候,要求图像顺序是BGR顺序
  • 使用plt.imshow 显示图像时候,要求图像顺序是RGB顺序

BGR与RGB的互换,可以使用cv2.cvtColor进行转换:

# bgr to rgb
img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)

# rgb to bgr
img_bgr = cv2.cvtColor(img_rgb, cv2.COLOR_RGB2BGR)

展示

  • cv2.imread 和 cv2.imshow
img = cv2.imread('../image/lenna.png')
img.shape  # img is bgr
cv2.imshow('png', img)
cv2.waitKey(0)

opencv与matplot显示图片通道区别_第3张图片

cv2.imshow('rgb', img_rgb)  # img_rbg is rgb
cv2.waitKey(0)

opencv与matplot显示图片通道区别_第4张图片

  • plt.imshow
plt.imshow(img)

opencv与matplot显示图片通道区别_第5张图片

img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
plt.imshow(img_rgb)

opencv与matplot显示图片通道区别_第6张图片

你可能感兴趣的:(python,opencv,python,cv2,plt)