python - 赋予灰度图像颜色

标签 python numpy opencv image-processing numpy-ndarray

edited image after assignment statement

我想为黑白图像添加颜色,我认为更改像素值应该可行。

for rows in rgb:
    for e in rows:
        for i in range(len(e)):
            max_val = e.max()
            min_val = e.min()
            if e[i] == max_val:
                e[i] * 2.5
            if e[i] == min_val:
                e[i] * 0.75
            else:
                e[i] * 1.5

代码没有返回错误,但它也没有改变值。我希望数字相乘并由同一个数组重新分配

最佳答案

我们可以利用 Numpy 的 broadcasting,而不是手动迭代具有低效 O(n^3) 运行时间的每个像素。功能。


我们首先使用 cv2.split() 将灰度图像分成单独的 BGR channel .这将为我们提供单独的 BGR channel ,每个 channel 都具有相同的值。接下来我们使用 np.multiply() 将每个 channel 乘以一个标量值.最后,我们使用 cv2.merge() 将每个单独的 channel 组合成彩色图像。创建单个多 channel 阵列


之前

>>> print(before.shape)
(331, 500, 3)

您可能想知道为什么图像具有三个 channel ,即使它显然是灰度图像。这是因为每个 channel 都具有相同的值,范围从 [0 ... 255]

之后

>>> print(after.shape)
(331, 500, 3)

同样, channel 数量相同,但我们修改了每个单独的 channel

TLDR:要为黑白图像添加颜色,我们必须提取每个单独的 BGR channel ,修改每个 channel ,然后重建图像

import cv2
import numpy as np

before = cv2.imread('2.png')
b, g, r = cv2.split(before)

np.multiply(b, 1.5, out=b, casting="unsafe")
np.multiply(g, .75, out=g, casting="unsafe")
np.multiply(r, 1.25, out=r, casting="unsafe")

after = cv2.merge([b, g, r])

cv2.imshow('before', before)
cv2.imshow('after', after)
cv2.waitKey()

关于python - 赋予灰度图像颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58135918/

相关文章:

python - 测试 dict 是否包含在 dict 中

python - 在 Python 中,你如何检查一个数字是否是整数类型之一?

python - 在二维 Python 数组中查找元素

python - 检测和定位两个图像中与文本不同的区域(平面/曲线/旋转)

python - 你能创建一个 python 生成器来以随机顺序提供一个范围内的值而不重复吗?

python - Pytesseract OCR 多个配置选项

python - Matplotlib - 线连接点不正确

python - numpy 中的窗口最大值

image-processing - Opencv中的位数模糊如何使用模式?

python - 使用像素数组设置 opencv 图像/numpy 数组值