为什么将U和V通道设置为0会导致显示蓝色画面?
Why setting U and V channels to 0 leads to displaying a Blue picture?
我做了什么:
我读取了一张BGR图像并将其转换为YUV颜色space。
然后我把它的U和V通道设置为0
我显示图像,我看到它全是蓝色的(好像我将 R 和 B 设置为 0)
问题:
- 为什么将U和V值设置为0导致图片的G和R通道也设置为0?
- 为什么图像显示为蓝色(BGR 颜色 space)而不是 YUV 颜色 space?
代码:
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
显示如下(这是正常结果,如我所料):
im
这样显示(不明白为什么是蓝色):
这是因为imshow
等待BGR格式的输入图像(OpenCV假设第一个通道(现在是Y)为蓝色)。那么,您将第二个和第三个通道设置为零 => 只有第一个通道将包含非零元素,因此只有蓝色通道参与可视化。
我做了什么:
我读取了一张BGR图像并将其转换为YUV颜色space。
然后我把它的U和V通道设置为0
我显示图像,我看到它全是蓝色的(好像我将 R 和 B 设置为 0)
问题:
- 为什么将U和V值设置为0导致图片的G和R通道也设置为0?
- 为什么图像显示为蓝色(BGR 颜色 space)而不是 YUV 颜色 space?
代码:
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
显示如下(这是正常结果,如我所料):
im
这样显示(不明白为什么是蓝色):
这是因为imshow
等待BGR格式的输入图像(OpenCV假设第一个通道(现在是Y)为蓝色)。那么,您将第二个和第三个通道设置为零 => 只有第一个通道将包含非零元素,因此只有蓝色通道参与可视化。