将转换矩阵应用于OpenCV图像中的像素

发布于 2021-01-29 14:59:45

我想将图像的颜色基础从RGB更改为其他颜色。我有一个要应用于每个像素的RGB的矩阵M,我们可以将其定义为x ij。

我目前正在迭代NumPy图像的每个像素并手动计算Mx ij。我什至无法对它们进行矢量化处理,因为RGB是1x3而不是3x1数组。

有一个更好的方法吗?也许是OpenCV或NumPy中的函数?

关注者
0
被浏览
105
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    记不清执行此操作的规范方法(可能避免了转置),但这应该可行:

    import numpy as np
    
    M = np.random.random_sample((3, 3))
    
    rgb = np.random.random_sample((5, 4, 3))
    
    slow_result = np.zeros_like(rgb)
    for i in range(rgb.shape[0]):
        for j in range(rgb.shape[1]):
            slow_result[i, j, :] = np.dot(M, rgb[i, j, :])
    
    # faster method
    rgb_reshaped = rgb.reshape((rgb.shape[0] * rgb.shape[1], rgb.shape[2]))
    result = np.dot(M, rgb_reshaped.T).T.reshape(rgb.shape)
    
    print np.allclose(slow_result, result)
    

    如果是标准色彩空间之间的转换,则应使用Scikit Image:



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看