OpenCV: Como desenhar uma linha com cores que são invertidas relativamente para a superfície em que deve ser desenhada?

StackOverflow https://stackoverflow.com/questions/4266316

Pergunta

Então, temos uma imagem. Queremos desenhar uma linha que definitivamente deve ser vista. Então, como desenhar linhas com cores invertidas relativamente à superfície em que deve ser desenhada em cada ponto?

Foi útil?

Solução

Use um LineIterator e xor os valores de cores de cada pixel manualmente.

Outras dicas

O truque XOR é trivialmente diferente. Não é visualmente o mais distinto, mas apenas porque ignora completamente como os olhos humanos funcionam. Por exemplo, em cinzas leves, uma cor vermelha saturada é visualmente bastante distinta.

Você pode querer converter a cor para o HSV e verificar a saturação S. Se baixa (escala de cinza), desenhe um pixel vermelho. Se a saturação for alta, o tom é bastante óbvio e um pixel branco ou preto se destacará. Use preto (v = 0) se o pixel original tiver um V alto; Use branco se o pixel original teve um V baixo (cor escura saturada)

Você pode usar o método LineIterator, conforme sugerido anteriormente.

(Btw, o truque xor também tem casos bastante ruins. 0x7f ^ 0xff = 0x80. Isso é muito difícil de ver)

Isso é do topo da minha cabeça e não sou um dev C ++, mas deve ser possível desenhar a linha para uma imagem separada e depois imitar um modo de mistura invertida ... basicamente você precisa obter o 'negativo'/ Cor invertida atrás de um pixel, que você obtém subtraindo a cor abaixo da linha do valor máximo de cor.

Algo como:

uint invert(uint topPixel, uint bottomPixel) {
            return (255 - bottomPixel);
}

Não sei como se as cores são de 0 a 255 ou de 0,0 a 1,0, mas espero que isso ilustre a idéia.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top