Pergunta

Aqui está o meu problema:

Estou procurando uma maneira de importar uma imagem para C ++ e depois atravessar seus pixels, incrementando um contador toda vez que um pixel de uma determinada cor é encontrado.

Fiz algumas pesquisas, mas não encontrei nada particularmente útil. Diabo Parece uma boa opção, mas não tenho certeza de por onde começar.

Aqui está um pouco de pseudo-código C ++/Python, esperançosamente, ilustrando o que estou tentando fazer:

for image in folder:

    A = 0;
    B = 0;

    for pixel in image:

        if (pixel == colourA) {A++}
        if (pixel == colourB) {B++}

    //Output the count of colours for each image
    outputToFile(A, B);

Alguém tem algumas dicas sobre por onde começar?

Obrigado

Edite algumas informações extras: estou usando o Windows 7 e todas as imagens são .pngs

Edit2 Eu tenho tudo funcionando, exceto realmente descobrir a cor do pixel atual. Atualmente estou usando isso:

int blue = ((uchar *)(img->imageData + pixelX*img->widthStep))[pixelY*img->nChannels + 0];

Mas não funciona, e eu não tenho ideia de como funciona. Não consegui encontrar nada sobre isso que eu poderia entender. Alguém poderia me apontar na direção certa sobre como encontrar os valores RGB de um determinado pixel?

Edit3 feito! Para quem achar isso tentando fazer uma coisa semelhante, a maioria das minhas perguntas restantes e um pouco de código pode ser encontrado aqui. Obrigado pela ajuda!

Foi útil?

Solução

Definitivamente dê uma olhada em OpenCV Porque, quando você começa a precisar de mais espaço para se mover, o OpenCV permite que você faça muito mais tarefas de visão computacional. E use Boost :: FileSystem Para fazer o código 'para cada imagem no dir'.

Observe que o CV :: Compare A função basicamente já faz metade do trabalho para você ... Vou deixar você ler isso e gostar de aproveitar a API OpenCV.

Outras dicas

Você deve dar uma olhada no OpenCV.

Depende da plataforma e formato de imagem. No Windows, as imagens BMP são suportadas nativamente (ou seja, na API). O ImageMagick é uma biblioteca de plataformas cruzadas, bastante universal, toma qualquer formato por aí, mas é pesado. O QT também possui algum processamento de imagem - limitado aos formatos mais comuns.

O SDL tem algumas coisas úteis de manipulação de pixels.

http://www.libsdl.org/

É muito limpo também.

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