Apply transformation matrix to pixels in OpenCV image

后端 未结 1 1058
天命终不由人
天命终不由人 2020-12-20 05:12

I want to change the color basis of an image from RGB to something else. I have a matrix M that I want to apply to each pixel\'s RGB, which we can define as xij.<

相关标签:
1条回答
  • 2020-12-20 05:38

    Can't remember the canonical way to do this (possibly avoiding the transposes) but this should work:

    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)
    

    If it's a transformation between standard colorspaces then you should use Scikit Image:

    • http://scikit-image.org/docs/dev/api/skimage.color.html
    0 讨论(0)
提交回复
热议问题