Substitua a cor do pixel da imagem com base na condição do canal em Python
Sep 12 2020
Eu tenho uma imagem RGB, como posso alterar a cor do pixel para branco ou preto com base na comparação dos valores dos canais vermelho e azul do mesmo pixel?
if r_pixel > g_pixel:
# make pixel white
else:
# Make pixel black
Aqui está o que tentei:
img = cv2.imread("car.jpg")
b,g,r = cv2.split(img)
new = np.subtract(r , g)
A saída é uma imagem estritamente branca e preta (0 ou 255).
Respostas
2 MarkSetchell Sep 11 2020 at 23:20
Eu usaria np.where()para escolher 255ou 0em cada pixel, dependendo da condição:
import cv2
import numpy as np
# Load image
img = cv2.imread('colorwheel.jpg')
# Wherever R>G, make result white, and black elsewhere
res = np.where(img[...,2]>img[...,1], 255, 0).astype(np.uint8)
# ALTERNATIVE SOLUTION FOLLOWS
# Or you could generate a Boolean (True/False) array and multiply by 255 to get the same result
res = ((img[...,2]>img[...,1]) * 255 ).astype(np.uint8)
Entrada
Resultado
1 GilPinsky Sep 11 2020 at 23:03
Você pode dividir os canais necessários primeiro, conforme mostrado abaixo, em seguida, comparar os dois canais e converter o resultado de booleano em uint8 e, em seguida, comprimir o canal singleton e multiplicar por 255:
r = img[:,:,2:]
g = img[:,:,1:2]
new = 255*np.squeeze(r>g,axis=2).astype('uint8')
O que significa um erro “Não é possível encontrar o símbolo” ou “Não é possível resolver o símbolo”?
Christopher Nolan uma vez se arrependeu de ter lido o 'roteiro de Pulp Fiction' de Quentin Tarantino