Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2011
    Messaggi
    55

    [C++]Trasformare i valori dei pixel da RGB a YCrCb

    Ciao vorrei sapere come devo fare per sostituire i valori dei pixel RGB di una immagine in valori che si trovano tramite una matrice...

    Finora sono arrivato qui (devo usare per forza le opencv):


    codice:
    #include <highgui.h> 
    #include <cxcore.h> 
    #include <cv.h> 
    #include <iostream> 
    #include <string.h> 
    #include <stdio.h> 
    int main (void) 
    { 
    unsigned char Red, Green, Blue; 
    int CounterX, CounterY; 
    IplImage *src; 
    char name [255]="c:\\lena.png"; //questa l'immagine che carico 
    cvNamedWindow("window src",CV_WINDOW_AUTOSIZE); 
    src=cvLoadImage(name,1); 
    for (CounterY=0; CounterY<src->height; CounterY++) 
    { 
    for (CounterX=0; CounterX<src->width; CounterX++) 
    { 
    Red = *((unsigned char*)(src->imageData + src->widthStep*CounterY) + 3*CounterX + 2); Green = *((unsigned char*)(src->imageData + src->widthStep*CounterY) + 3* (CounterX) + 1); 
    Blue = *((unsigned char*)(src->imageData + src->widthStep*CounterY) + 3*CounterX + 0);
     } 
    cvShowImage("window src", src); 
     cvWaitKey (0);
     cvDestroyWindow("window src"); 
    cvReleaseImage (&src); }
    La domanda è dove mettere la mia matrice e in che maniera?

    In realtà mi dovrebbe venire fuori un'immagine con delle nuove variabili per ogni pixel...sto procedendo bene?

  2. #2
    Utente di HTML.it
    Registrato dal
    Aug 2011
    Messaggi
    55
    http://forum.html.it/forum/showthrea...5#post13653695

    qui spiego un problema un tantino diverso ma più semplice...qualcuno ha qualche suggerimento da darmi per creare questa cosa?

  3. #3
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Mica spieghi bene il problema ... hai dei dati da convertire ? Li prendi dall'array originale, li converti e li conservi nello stesso array. Ovviamente perderai l'immagine originale.

    Se non la vuoi perdere, alloca un nuovo array e memorizzaci i dati convertiti.

    Spero di avere capito qualcosa ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  4. #4
    Utente di HTML.it
    Registrato dal
    Aug 2011
    Messaggi
    55
    Io ho un'immagine in ingresso.
    Dell'immagine in out mi interessa poco nel senso che una volta letti i pixel vorrei descrivere la mia immagine con altri valori che ottengo dai valori RGB...

    Come devo fare? Una volta iniziato il ciclo come devo incamerare i valori in un altro posto?

  5. #5
    Utente di HTML.it L'avatar di escocat
    Registrato dal
    Feb 2012
    Messaggi
    308
    Bho non capisco.... la prima immagine la esplori e carichi i colori dei pixel in un array c(x, y). Da ogni elemento c (data una ascissa x e una ordinata y dell'immagine) estrai le tre componenti R(c), G(c), B(c) e li trasformi come vuoi per ottenere un colore c'(R', G', B') "trasformato" che metterai in un secondo array c'(x, y). Se vuoi puoi modificare l'immagine stessa sostituendo i suoi pixel con quelli nuovi oppure copiare i nuovi pixel in una seconda immagine.

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    ...sostituendo i suoi pixel con quelli nuovi oppure copiare i nuovi pixel in una seconda immagine
    Che è quello che gli ho detto anch'io ...

    Bho non capisco....
    Anche questo l'ho detto io ...

    Una volta iniziato il ciclo come devo incamerare i valori in un altro posto?
    Cosa non ti è chiaro di ciò che ti è stato detto? Crea un nuovo array e ci metti i dati che hai trasformato ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Utente di HTML.it
    Registrato dal
    Aug 2011
    Messaggi
    55
    Ragazzi sono ancora qui bloccato a fare un array decente...

    Ho sviluppato questo finora:
    rispetto a prima ho messo una struct colorrgb per incamerare i futuri valori dei pixel
    Please aiutatemi...non ne esco più da questa assurdità




    codice:
    struct colorRGB 
    {
     float red; 
    float green;
     float blue; 
    };
     void PixelFeature::RgbtoYCrCb 
    { 
    unsigned char Red, Green, Blue; 
    int CounterX, CounterY, i; 
    IplImage *src; 
    char name [255]="c:\\lena.png"; 
    cvNamedWindow("window src",CV_WINDOW_AUTOSIZE); 
    Red = *((unsigned char*)(src->imageData + src->widthStep*CounterY) + 3*CounterX + 2); Green = *((unsigned char*)(src->imageData + src->widthStep*CounterY) + 3*CounterX + 1); 
    Blue = *((unsigned char*)(src->imageData + src->widthStep*CounterY) + 3*CounterX + 0); 
    for 
    (int i=0; i<(src->height*src->width)-1; i++) 
    { 
    colorRGB element; 
    element.red = Red;  
    element.green = Green; 
    element.blue = Blue; 
    image.push_back(element); 
    }

    ora per sapere se i valori sono stati copiati dentro l'array come devo fare? e per poterli cambiare di valore?
    Vi prego datemi un consiglio su come devo agire...mi sto impantanando su una cosa assurda a mio avviso

  8. #8
    Utente di HTML.it
    Registrato dal
    Aug 2011
    Messaggi
    55
    Originariamente inviato da escocat
    Bho non capisco.... la prima immagine la esplori e carichi i colori dei pixel in un array c(x, y). Da ogni elemento c (data una ascissa x e una ordinata y dell'immagine) estrai le tre componenti R(c), G(c), B(c) e li trasformi come vuoi per ottenere un colore c'(R', G', B') "trasformato" che metterai in un secondo array c'(x, y). Se vuoi puoi modificare l'immagine stessa sostituendo i suoi pixel con quelli nuovi oppure copiare i nuovi pixel in una seconda immagine.
    esatto...chiedevo proprio questo... chiedevo un aiuto sul tipo di comandi da usare...come ho fatto sopra va bene?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.