如何根据条件更改像素值

How to change pixel value based on a condition

图像为 1920 x 1080。 当通道值高于另一个时,如何更改像素值?

这是我做的。

y_range = 1080
for y in range(y_range):
    x = 0
    while x < 1920:

        green_value = img[y, x][1]
        red_value = img[y, x][2]
        diff = int(red_value) - int(green_value)

        if diff < 5:
            img[y, x] = [0, 0, 0]

        x = x + 1

有没有比在每个像素上迭代更有效的方法?

不要为此使用任何循环,使用 ndarray 功能和逻辑索引。

你想要实现的是这样的:

d = img[:,:,2] - img[:,:,1]    # Difference of color channels
q = d < 5                      # Threshold criterion
img[q] = [0,0,0]               # Overwrite data based on threshold

假设您的图像是 BGR 格式,并且您希望红色和绿色通道之间有符号差异。如果您指的是距离变化:

d = np.abs(img[:,:,2] - img[:,:,1])    # Distance between color channels