繁体   English   中英

如何用python读取opencv中的YUV?

[英]How can I read YUV in opencv with python?

我使用“cv.imread”读取图片

我想做的是“比较‘使用公式从 rgb 转换为 yuv’到‘使用 cv.cvtColor(img, cv.COLOR_BGR2YUV) 从 rgb 转换为 yuv’”

这是我的代码

img = cv.imread('pic.jpeg')

# convert to yuv using fomula
toYUV = np.zeros((len(img), len(img[0]), 3), np.uint8)
for i in range(len(img)):
    for j in range(len(img[0])):
        y = 0.257*img[i][j][0] + 0.504*img[i][j][1]+0.095*img[i][j][2]+16
        u = -0.148*img[i][j][0] - 0.291*img[i][j][1]+0.499*img[i][j][2]+128
        v = 0.439*img[i][j][0] - 0.368*img[i][j][1]-0.071*img[i][j][2]+128
        toYUV[i][j] = [y, u, v]
cv.imshow('toYUV', toYUV)

# convert to yuv using cvtColor
yuv = cv.cvtColor(img, cv.COLOR_BGR2YUV)

cv.imshow('yuv', yuv)

如您所见,我使用公式保存了转换后的值,但结果不是我预期的那样。

我想我将 YUV 格式数据保存到 toYUV,但 cv.imshow 读取它就像 RGB 格式一样 我如何读取包含 YUV 数据的“toYUV”?

如果您使用PIL/PillowImageMagickwand ,它们有一个图像“容器” ,可以跟踪您的图像类型和任何元数据,例如 EXIF 或 IPTC 和 ICC 颜色配置文件。 因此,如果您使用PIL打开图像并将其转换为 HSV 色彩空间, PIL会知道并记住您的像素值现在代表色调、饱和度和明度,而不是 RGB。

OpenCV不这样做——它对硬核、高性能计算机视觉(因此得名)更感兴趣,而不是对照片档案进行编目、索引和管理。 它将您的像素存储在一个非常简单的 Numpy 数组中,而不是数组的维度,对像素的含义不了解或不感兴趣 - 它通常假设它们在保存和显示时是 BGR - 或者可能是灰度或 BGRA 如果有1 或 4 个通道。


回到你的问题,如果你想比较它们,我认为你会发现将 YUV 图像视为三个独立的灰度图像会更容易。 因此,您可以使用Y,U,V = cv2.split(YOURIMAGE)将 Y、U 和 V 通道拆分为 3 个独立的单通道图像,然后使用rowOfThree = np.hstack((Y,U,V))将三个灰色通道并排显示。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM