OpenCV: Como desenhar uma linha com cores que são invertidas relativamente para a superfície em que deve ser desenhada?
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?
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.