Calcule o histograma de cada canal de uma imagem
A calculadora de histograma de imagem transforma valores de pixel separados por canal em distribuições de frequência compactas.
Executar grátis
Roda direto no seu navegador. Grátis, sem cadastro — seus dados não são enviados para lugar nenhum.
Informe um ou mais canais nomeados, escolha a quantidade de faixas e receba uma lista ordenada de contagens para cada canal. Ela é útil quando a imagem já foi decodificada e você precisa de estatísticas reproduzíveis sem enviar nem recodificar o arquivo original. Cada valor é validado no intervalo de 8 bits, cada pixel entra em exatamente uma faixa e uma lista vazia gera erro.
Prepare os valores dos canais
Forneça os pixels decodificados no array channels. Cada item precisa ter um nome de canal exclusivo e um array values com intensidades inteiras de 0 a 255. Nomes como red, green, blue, alpha e gray são convencionais, mas a calculadora não impõe um modelo de cor; qualquer componente no mesmo domínio de 8 bits pode ser usado. A ordem dos valores não muda o histograma, pois somente a frequência importa. Cada canal deve conter pelo menos um pixel. A solicitação é recusada quando a lista externa ou uma lista values está vazia, quando o nome não existe ou se repete, ou quando algum valor é fracionário ou sai da faixa permitida. Essas verificações evitam que dados incompletos pareçam uma distribuição válida. São aceitos até dezesseis canais e um milhão de valores por canal.
Entenda a distribuição nas faixas
Escolha uma quantidade inteira de 1 a 256 faixas ou omita o campo para usar 16. Todo o domínio de intensidade de 8 bits é dividido em intervalos de mesma largura, começando em 0 e terminando em 255. Com 16 faixas, a primeira conta de 0 a 15, a segunda de 16 a 31 e a última de 240 a 255. De modo geral, o índice é a parte inteira inferior do valor multiplicado pela quantidade de faixas e dividido por 256. O limite superior é mantido explicitamente na última faixa, portanto 255 nunca escapa do array. A regra continua determinística mesmo quando a quantidade escolhida não divide 256 por igual. Cada pixel aumenta um único contador, e a soma das contagens de um canal sempre corresponde ao seu pixel_count.
Leia, compare e valide a resposta
A resposta apresenta bins, os limites fixos value_min e value_max e um objeto de histograma para cada canal informado. Cada objeto preserva o nome do canal, informa pixel_count e retorna counts em ordem crescente de intensidade. A primeira posição corresponde sempre à faixa mais escura e a última, à mais clara, facilitando gráficos e comparações. Some o array counts e confirme que o total equivale a pixel_count; o algoritmo garante essa relação, e a conferência pode revelar truncamentos em outra etapa. Histogramas resumem frequências, não a disposição espacial, então imagens muito diferentes podem ter resultados iguais. O recurso também não decodifica arquivos, identifica espaços de cor, normaliza exposição nem combina canais. Decodifique a fonte primeiro e use esta capacidade para a contagem. No navegador, os dados ficam locais; a automação por API custa US$ 0,002 por solicitação.
Casos de uso
Compare distribuições de cores
Gere contagens equivalentes de vermelho, verde e azul antes de medir diferenças entre imagens decodificadas.
Detecte extremos de exposição
Examine as primeiras e últimas faixas para identificar canais dominados por sombras ou realces.
Valide um fluxo de processamento
Registre histogramas determinísticos antes e depois de uma transformação para encontrar mudanças tonais inesperadas.
Perguntas frequentes
Quanto custa?
A execução pela API custa US$ 0,002 por solicitação. O mesmo cálculo determinístico também pode ser feito no navegador.
Quais valores de pixel são aceitos?
Cada valor deve ser um inteiro de 0 a 255, correspondente a um canal de imagem de 8 bits.
O que acontece se uma lista de pixels estiver vazia?
A solicitação falha com um erro de entrada inválida; uma lista vazia não gera um histograma preenchido com zeros.
Como os valores entram nas faixas quando elas não dividem 256?
O índice usa a parte inteira inferior de value multiplicado por bins e dividido por 256, mantendo 255 na última faixa.
Este recurso decodifica arquivos PNG, JPEG ou WebP?
Não. Você deve fornecer valores de pixel já decodificados em arrays de canais nomeados.
Os canais podem ter quantidades diferentes de pixels?
Sim. Cada canal é contado separadamente e informa seu próprio pixel_count.
Para desenvolvedores — acesso via API
Tudo nesta página está disponível via API. Esta seção é para equipes que querem integrar a ferramenta aos próprios sistemas; quem não precisa disso pode simplesmente usar a ferramenta acima.
Endpoint
Autenticação por token Bearer. Um único POST coloca a tarefa na fila; o resultado chega por webhook ou link assinado.
Chame do seu código
curl -X POST https://api.kit.forhosting.com/image/histogram \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"channels":[{"channel":"red","values":[0,15,16,127,128,240,255]},{"channel":"green","values":[0,64,64,128,192,255]}]}'const res = await fetch("https://api.kit.forhosting.com/image/histogram", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"channels": [
{
"channel": "red",
"values": [
0,
15,
16,
127,
128,
240,
255
]
},
{
"channel": "green",
"values": [
0,
64,
64,
128,
192,
255
]
}
]
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/image/histogram",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"channels": [
{
"channel": "red",
"values": [
0,
15,
16,
127,
128,
240,
255
]
},
{
"channel": "green",
"values": [
0,
64,
64,
128,
192,
255
]
}
]
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/image/histogram", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"channels":[{"channel":"red","values":[0,15,16,127,128,240,255]},{"channel":"green","values":[0,64,64,128,192,255]}]}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"channels":[{"channel":"red","values":[0,15,16,127,128,240,255]},{"channel":"green","values":[0,64,64,128,192,255]}]}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/image/histogram", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Exemplo de requisição
{
"channels": [
{
"channel": "red",
"values": [
0,
15,
16,
127,
128,
240,
255
]
},
{
"channel": "green",
"values": [
0,
64,
64,
128,
192,
255
]
}
]
}Exemplo de resposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "image.histogram",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}A API é assíncrona: cada chamada devolve um task_id na hora. Se preferir polling, consulte o status a até 1 requisição por segundo.
Preço
Preço publicado, sem tokens nem créditos escondidos. Tarefa que falha não é cobrada.
Limites
max_channels | 16 |
max_values_per_channel | 1000000 |
Erros
| HTTP | Código | O que significa |
|---|---|---|
401 | unauthorized | Token ausente ou inválido. Confira o header Authorization. |
402 | insufficient_balance | Saldo insuficiente para esta tarefa. Faça uma recarga e tente de novo. |
404 | unknown_type | Esse tipo de tarefa não existe. Confira o campo type no catálogo. |
429 | rate_limited | Muitas requisições em pouco tempo. Espere um instante e tente de novo. |