antiblock
Elveron
  • Chatbox

    You don't have permission to chat.
    Load More
Sign in to follow this  
Bergalho

Aplicar máscara de convolução a imagem em formato raw em linguagem c

5 posts in this topic

Boas,

 

Tenho um trabalho de universidade que consiste em aplicar uma máscara de convolução a uma imagem em formato raw. Essa máscara deve estar num ficheiro de texto. O meu problema é o seguinte, segundo o que pesquisei, para fazer isso preciso de ter informação sobre os pixels da imagem, para posteriormente aplicar a máscara (multiplicar pelos valores da máscara). Para tal tenho que ter os valores de cada pixel e é aí que está o meu problema, como ler a imagem e obter os valores dos pixels para uma matriz, para posteriormente aplicar a máscara. Tenho o seguinte código simples para leitura da imagem, mas penso que não estou a obter os valores dos pixels, mas sim algum outro tipo de informação da imagem. A imagem tem 528x360 pixels e nesse código o que faço é imprimir os valores e depois fazer uma cópia dos mesmos para verificar que consigo voltar a obter a imagem. Mas não consigo de forma nenhuma manipular esses valores, senão a nova cópia não abre. Alguém me poderia ajudar com isto?

obrigado


int main(void)
{
    unsigned char buffer[528*360];
    int i;
    FILE* f;
    FILE* f2;

    if ((f = fopen("image2.raw", "rb")) == NULL)
    {
        fprintf(stderr, "Error opening file\n");
        return 1;
    }

    fread(buffer, 1, 528*360, f);

    for (i = 0; i < 528 * 360; i++)
    {
        printf("%02x| ", buffer[i]);
    }

    f2 = fopen("image2_copy.raw", "wb");

    for (i = 0; i < 528*360; i++)
        fwrite(&buffer[i], sizeof(unsigned char), 1, f2);

    putchar('\n');

    fclose(f);
    fclose(f2);
    return 0;
}

Share this post


Link to post
Share on other sites
antiblock
Rodnia | Alpha & Omega

Não sei especificamente como se lêm imagens, não é a minha área mas, penso que não pode ser feito dessa maneira, visto que os ficheiros RAW ainda contêm muitos metadados do dispositivo que capturou a imagem para posterior edição.

 

Aliás, isto é válido para todas as imagens, muitas delas começam com um cabeçalho a indicar o tipo de formato da imagem:

 

JPG/JPEG:

QA7hmNu.png

 

PNG:

OUQtbim.png

 

DDS:

t5u2HUy.png

 

Vais ter de encontrar outra forma de as ler em vez de estares a ler e começar logo a tentar dar parse aos pixéis.

Share this post


Link to post
Share on other sites

Será possível de alguma forma criar uma imagem só com tons de cor apenas com informação dos pixels e depois manipular?

Share this post


Link to post
Share on other sites

Podes criar um ficheiro no formato que quiseres. Utilizas um modo binário para ler e escrever e gravas uma determinada estrutura. Este ficheiro não vai é funcionar com nenhum programa de visualização de imagens mas, se isso é algo que não necessitas, então força nisso.

Share this post


Link to post
Share on other sites

Consegui resolver o problema, partindo de um ficheiro raw apenas com informação dos pixels da imagem e nada mais, consigo alterar a informação e depois refazer a imagem. Convertendo o ficheiro final para jpeg e comparando com o original também em jpg noto as diferenças.

 

Obrigado pelas dicas! 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this