为什么将U和V通道设置为0会导致显示蓝色图片?

时间:2015-03-11 09:48:02

标签: python opencv numpy

我做了什么:

  • 我读了一个BGR图像并将其转换为YUV颜色空间。

  • 然后我将其U和V通道设置为0

  • 我显示图像,我看到它全是蓝色(好像我把R和B设置为0,而不是)

问题:

  • 为什么将U和V值设置为0会导致图片集的G和R通道也为0?
  • 为什么图像以蓝色(BGR色彩空间)而不是YUV色彩空间显示?

代码:

import cv2
import numpy as np

img=cv2.imread('rgb_pic.png')
yuv_img=cv2.cvtColor(img,cv2.COLOR_BGR2YUV)
cv2.imwrite('yuv_pic',yuv_img)

cv2.namedWindow('YUV',cv2.WINDOW_AUTOSIZE)
cv2.imshow('YUV',yuv_img) # Displayed image is YUV, that is ok
cv2.waitKey(0)
cv2.destroyAllWindows()

im=yuv_img # Copy the YUV image to an other one
for in in range(im.shape[0]):
    for j in range(im.shape[1]):
       im[i,j,1]=0 # Set U to 0
       im[i,j,2]=0 # Set V to 0

# Display im
cv2.namedWindow('Result',cv2.WINDOW_AUTOSIZE)
cv2.imshow('Result',im) # Displayed image is totally BLUE :(
cv2.waitKey(0)
cv2.destroyAllWindows()

结果:

yuv_img显示如下(这是正常结果,我的期望):

enter image description here

im显示如下(我不明白为什么它是蓝色的):

enter image description here

1 个答案:

答案 0 :(得分:1)

这是因为imshow等待BGR格式的输入图像(OpenCV假设第一个通道(现在为Y)为蓝色)。好吧,你将第二和第三个频道设置为零=>只有第一个通道包含非零元素,因此只有蓝色通道才能参与可视化。