python

  转换原理很简单,只要知道变换矩阵就简单了,这个可以参考一些《数字图像处理》相关书籍或者查维基就ok了。

import numpy as np
import cv2 as cv


def yuv2rgb(img):
    W = np.array([
        [1, 0., 1.13983],
        [1, -0.39465, -0.58060],
        [1, 2.03211, 0.]
    ])
    imc = img.copy()
    imc = imc.astype(np.float)
    h, w, c = imc.shape
    for i in range(h):
        for j in range(w):
            # imc[i, j][0] -= 16   # Y
            imc[i, j][1] -= 128  # U
            imc[i, j][2] -= 128  # V
            imc[i, j] = np.matmul(W, imc[i, j])
    imc = imc.astype(np.uint8)
    return imc


img = cv.imread('C:/Users/darkchii/Pictures/original_golden_bridge-300x169.jpg', cv.IMREAD_UNCHANGED)
im1 = cv.cvtColor(img, cv.COLOR_RGB2YUV)
im2 = yuv2rgb(im1)
im3 = cv.cvtColor(im1, cv.COLOR_YUV2RGB)

cv.imshow('1', img)
cv.imshow('2', im1)
cv.imshow('3', im2)
cv.imshow('4', im3)

cv.waitKey(0)

  测试结果(图 1 是 RGB 图,图 2 是使用 opencv RGB2YUV 转的,图 3 是自己编写的 YUV2RGB 转的结果,图 4 是使用 opencv 的 YUV2RGB 转的结果):

原文地址:https://www.cnblogs.com/darkchii/p/12868450.html