Solução para o problema Escala de Cinza sendo postada! Aproveitem!
Plataforma: URI (BEECROWD)
Problema: 2630
Enunciado:
Alguns algoritmos de processamento de imagem exigem um pré-processamento no qual é necessário transformar uma imagem colorida em uma imagem em tons de cinza. Esta conversão pode ser realizada de diversas maneiras, dependendo do resultado que se pretende obter.
Para preservar a percepção das cores básicas pelo olho humano, uma conversão apropriada seria tomar 30% da componente vermelha (R), 59% da componente verde (G) e 11% da componente azul (B). Em termos matemáticos,
P = 0, 30R + 0, 59G + 0, 11B
Outras abordagens possíveis seriam determinar o valor de P através da média aritmética das três componentes ou atribuir a P os valores da maior ou da menor entre as três componentes.
Dadas as componentes RGB de um pixel da imagem colorida, determine o valor do pixel P da imagem em tons de cinza correspondente, determinada a conversão a ser utilizada. Despreze a parte decimal do resultado, caso exista.
Linguagens: C e C++
Solução:
Usei bastante o operador ternário nesse exercício!
Outra coisa interessante foi o casting (coerção) de tipos, pois trabalhei com valores reais, mas precisei "forçá-los" a serem inteiros depois. Isso foi feito com (int).
Alguma dúvida nas soluções? Entre em contato!
Código em C:
#include <stdio.h> int main() { int t, r, g, b, c = 0; char tipo[6]; scanf("%d", &t); while (t--) { scanf("%s", &tipo); scanf("%d %d %d", &r, &g, &b); printf("Caso #%d: ", ++c); if (tipo[1] == 'i') { printf("%d\n", (r <= g && r <= b? r : (g <= r && g <= b? g : b))); } else if (tipo[1] == 'a') { printf("%d\n", (r >= g && r >= b? r : (g >= r && g >= b? g : b))); } else if (tipo[1] == 'e') printf("%d\n", (int) (r + g + b)/3); else printf("%d\n", (int) (.3 * r + .59 * g + .11 * b)); } return 0; }
#include <iostream> using namespace std; int main() { int t, r, g, b, c = 0; char tipo[6]; cin >> t; while (t--) { cin >> tipo; cin >> r >> g >> b; cout << "Caso #" << ++c << ": "; if (tipo[1] == 'i') { cout << (r <= g && r <= b? r : (g <= r && g <= b? g : b)) << endl; } else if (tipo[1] == 'a') { cout << (r >= g && r >= b? r : (g >= r && g >= b? g : b)) << endl; } else if (tipo[1] == 'e') cout << (int) (r + g + b)/3 << endl; else // 30R + 0, 59G + 0, 11B cout << (int) (.3 * r + .59 * g + .11 * b) << endl; } return 0; }
Nenhum comentário:
Postar um comentário