使用numpy将sepia效果应用于3D数组

2024-05-26 09:18:23 发布

您现在位置:Python中文网/ 问答频道 /正文

在numpy中,我希望获取一个3d颜色值数组(2d表示图像,其中每个像素都是RGB颜色)并为其应用一个棕褐色过滤器。假设一个颜色是由r, g, b定义的,那么在对其应用棕褐色过滤器之后应该返回的颜色是:

sepia_r = .393*r + .769*g + .189&b
sepia_g = .349*r + .686*g + .168*b
sepia_b = .272*r + .534*g + .131*b

用一个大数组(大概是一个1080x864的3个长向量数组)来实时完成这个任务的最快方法是什么?在


Tags: 方法图像numpy过滤器定义颜色rgb像素
2条回答

根据我在numpy speed方面的经验,我总是试图找到一个全球性的指导来完成整个工作。 我应该用r值排列一个数组,另一个数组用g值,最后一个数组用b值,然后使用multiple:

http://docs.scipy.org/doc/numpy/reference/generated/numpy.multiply.html

假设(height, width, channels)的标准图像数组组织,您可以直接使用numpy矩阵乘法。在

from skimage.data import lena  # Color image version of lena. If you don't have skimage, use any image
import matplotlib.pyplot as plt

img = lena().astype(float) / 256.
plt.figure()
plt.subplot(1, 2, 1)
plt.imshow(img)

sepia_filter = np.array([[.393, .769, .189],
                         [.349, .686, .168],
                         [.272, .534, .131]])

# here goes the filtering
sepia_img = img.dot(sepia_filter.T)

# Unfortunately your filter lines do not have unit sum, so we need to rescale
sepia_img /= sepia_img.max()

plt.subplot(1, 2, 2)
plt.imshow(sepia_img)
plt.show()

相关问题 更多 >